藍橋杯 剪格仔(2013 A 9)

2021-10-23 03:55:45 字數 2670 閱讀 3627

如圖p1.jpg所示,3 x 3 的格仔中填寫了一些整數。

我們沿著圖中的紅色線剪開,得到兩個部分,每個部分的數字和都是60。

本題的要求就是請你程式設計判定:對給定的m x n 的格仔中的整數,是否可以分割為兩個部分,使得這兩個區域的數字和相等。

如果存在多種解答,請輸出包含左上角格仔的那個區域包含的格仔的最小數目。

如果無法分割,則輸出 0

程式輸入輸出格式要求:

程式先讀入兩個整數 m n 用空格分割 (m,n<10)

表示**的寬度和高度

接下來是n行,每行m個正整數,用空格分開。每個整數不大於10000

程式輸出:在所有解中,包含左上角的分割區可能包含的最小的格仔數目。

例如:使用者輸入:

3 310 1 52

20 30 1

1 2 3

則程式輸出:

3再例如:

使用者輸入:

4 31 1 1 1

1 30 80 2

1 1 1 100

則程式輸出:

10(參見p2.jpg)

資源約定:

峰值記憶體消耗 < 64m

cpu消耗 < 5000ms

#include

#include

#include

#include

#define mk(i,j) make_pair(i,j)

using

namespace std;

int m, n;

int total;

int g[10]

[10];

int ans;

/*抽象了一種剪輯方法*/

class

cut;

/** * 將st中的元素拷貝到新set中

* @param st

* @return

*/set

int,

int>

>

copyset

(set

int,

int>

>

&st)

return ans;

}void

add(

int sum,

int i,

int j, set

int,

int>

>

&grids, cut *

&cut_new)

vector

> vs[

100]

;//分別儲存格仔數為1~100的各種剪法

intmain

(int argc,

const

char

*ar**)

}// 第乙個格仔就是一半

if(g[0]

[0]== total /2)

/*左上角格仔,只有一種剪法,加入v[1]*/

cut *c =

newcut()

;const pair<

int,

int> p =

make_pair(0

,0);

c->grids.

insert

(p);

c->sum = g[0]

[0];

vs[1]

.push_back

(c);

//只包含乙個格仔且包含00的只有一種剪法

for(

int i =

2; i <= m * n;

++i)

else

if(cut_new-

>sum

vs[i]

.push_back

(cut_new);}

if(x-

1>=

0&&grids.

find(mk

(x-1

,y))

==grids.

end())

else

if(cut_new-

>sum

vs[i]

.push_back

(cut_new);}

if(y+

1find(mk

(x,y+1)

)==grids.

end())

else

if(cut_new-

>sum

vs[i]

.push_back

(cut_new);}

if(y-

1>=

0&&grids.

find(mk

(x,y-1)

)==grids.

end())

else

if(cut_new-

>sum

vs[i]

.push_back

(cut_new);}

iter++;}

}}printf

("%d\n",0

);return0;

}

剪格仔 藍橋杯

問題描述 如下圖所示,3 x 3 的格仔中填寫了一些整數。10 1 52 20 30 1 1 2 3 我們沿著圖中的星號線剪開,得到兩個部分,每個部分的數字和都是60。本題的要求就是請你程式設計判定 對給定的m x n 的格仔中的整數,是否可以分割為兩個部分,使得這兩個區域的數字和相等。如果存在多種...

剪格仔 藍橋杯

這是2013 年第四屆藍橋杯全國軟體大賽預賽a組 c c 組 第9 題,為程式設計題,方法是深度優先搜尋 dfs 如圖p1.jpg 所示,3 x 3 的格仔中填寫了一些整數。我們沿著圖中的紅色線剪開,得到兩個部分,每個部分的數字和都是60。本題的要求就是請你程式設計判定 對給定的 m x n 的格仔...

藍橋杯 剪格仔

問題描述 如下圖所示,3 x 3 的格仔中填寫了一些整數。10 1 52 20 30 1 1 2 3 我們沿著圖中的星號線剪開,得到兩個部分,每個部分的數字和都是60。本題的要求就是請你程式設計判定 對給定的m x n 的格仔中的整數,是否可以分割為兩個部分,使得這兩個區域的數字和相等。如果存在多種...