題目大意:
有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...