P1092 NOIP2004 提高組 蟲食算

2022-06-25 08:54:09 字數 722 閱讀 6171

原題鏈結

考察:dfs+剪枝

思路:從最後一列開始dfs,用bool 陣列記錄哪些數字被使用了即可.接下來思考如何剪枝:

搜尋順序剪枝: 從大到小列舉,大數字在低位可能性較大.

冗餘處理:這裡是排列型列舉.

可行性剪枝:比較關鍵,需要兩個剪枝:高位無進製.  從第1列~第n列檢查是否符合實際.

最優性剪枝:無

1 #include 2 #include 3 #include 4

using

namespace

std;

5const

int n = 30;6

intn,a[n],b[n];

7char s[4

][n];

8bool

st[n];

9int getid(int i,int

j)10

13bool

check()

1421

for(int i=2;i<=n;i++)

2229

return0;

30}31bool dfs(int k,int

p)32

52 }else63}

64for(int i=n-1;i>=0;i--)

6573

return0;

74}75int

main()

76

P1091 NOIP2004 提高組 合唱隊形

n 位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的 k 位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設 k 位同學從左到右依次編號為 1,2,k 他們的身高分別為 t 1,t 2,t k 則他們的身高滿足 t 1 cdots t t k 1 le i le k 你的任務是,已知所...

NOIP提高組2004 合併果子

在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過 n 1n 1n 1 次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合...

題解 NOIP提高組2004 合併果子

在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和。...