poj1014 母函式 優化

2022-05-23 18:24:09 字數 861 閱讀 1079

題目大意:

有1~6六種寶石,**分別為1~6 。。給定每種寶石的個數,問能否平分給兩個人

分析:一看顯然是個多重揹包問題,也可以用母函式做

不過母函式的複雜度是n*v*k,第一次tle了。。

後來發現一種優化方式

當個數大於 6的時候直接把個數設為 5(奇數),6(偶數)。。

discuss 裡面有位神牛給出了這個優化的證明:

我把個數設成60或者61也過了。。

#include #include 

#include

#include

#include

#include

using

namespace

std;

#define maxn 10000

int a[10

];bool m[2][150000

];int

main()

for(int i=1;i<=6;i++)

t+=a[i]*i;

}if(!t)

break

; printf(

"collection #%d:\n

",cas++);

if(t%2

)

memset(m,

0,sizeof

(m));

m[0][0]=1

;

for(int i=1;i<=6;i++)}}

if(m[0][t/2

])

else

puts(

"");

}return0;

}

POJ 1014 Dividing 母函式優化

description 每一行輸入6個數,第i個數表示價值為i的珠寶的個數,問這些珠寶是不是能等價平分給兩個人。sample input 1 0 1 2 0 0 1 0 0 0 1 1 0 0 0 0 0 0 sample output collection 1 can t be divided.c...

poj 1014 硬幣分割

poj 1014 經典多重揹包問題 by baiwenlei 題目大意 給出一些價值在1 6範圍間的彈珠,判斷是否能夠按照價值等分 解題思路 多重揹包問題,不過本題中若價值不是偶數,直接返回即可 最後注意輸出的時候要求case之間有乙個空行,最後乙個case結束以後不空行。否則presentatio...

POJ 1014 解題報告

這道題我用的是最原始的dfs,雖然加了cache,避免了一些重複運算,但不出意料地tle了。然後就是 優化 把每個value中的item個數減到200以下 看discuss可以取到30甚至6的,還有一堆mod的解法 我都不明白這些優化的原理。見源 中注釋掉的dfs部分。1014 accepted 3...