/*
* poj 1014 經典多重揹包問題 by baiwenlei
** 題目大意: 給出一些價值在1~6範圍間的彈珠,判斷是否能夠按照價值等分
** 解題思路: 多重揹包問題,不過本題中若價值不是偶數,直接返回即可
** 最後注意輸出的時候要求case之間有乙個空行,最後乙個case結束以後不空行。否則presentation error. 我就貢獻了乙個……
* 最後貢獻個資料:
* 92 84 76 104 86 131
* 32 24 16 14 2 1
* 0 0 0 0 0 0
* 這個資料是按照我的那個理論設計的。 兩個都是can。**/
#include namespace }}
inline void complete(int v, int v)}}
inline void multiple(int v, int v, int n)
int r = n;
for (int k=1; k> 1);
for (int i=0; i<=half_value; i++)
reachable[0] = true;
for (int i=1; i<=value_max; i++ )
return reachable[half_value];
}}int main()
if (sum == 0) break; // 退出條件
cout << "collection #" << n << ":" << endl;
cout << (could_split_fairly(sum) ? "can be divided." : "can't be divided.") << endl << endl;
}return 0;
}
POJ 1014 解題報告
這道題我用的是最原始的dfs,雖然加了cache,避免了一些重複運算,但不出意料地tle了。然後就是 優化 把每個value中的item個數減到200以下 看discuss可以取到30甚至6的,還有一堆mod的解法 我都不明白這些優化的原理。見源 中注釋掉的dfs部分。1014 accepted 3...
POJ1014幾種解法小結
第一種解法 dp 感覺不像 思想 本題是找按價值均分大理石的方案是否存在,由於分配時不能破壞大理石,所以有個顯而易見的剪枝 當所有的大理石的總價值為奇數時肯定不能被均分。把 問題轉化一下即 由乙個人能否從原大理石堆中取出總價值為原來一半的大理石,本題的主要演算法是動態規劃,陣列flag代表狀態,設總...
POJ1014 多重揹包
今天開始dp了,第一道多重揹包,模板題,還是想了很久,太弱了 題意 一行給出6個數,表示從1到6,6個不同權值的個數.求能否將所有權值不分割的分成權值相等的兩份.首先總權值為奇數的肯定不符合要求,接下來就是乙個多重揹包了.多重揹包的二進位制拆分我的理解大概是 首先將乙個數按二進位制拆分之後可以用拆分...