思路:一道多重揹包題,之前學習揹包問題的時候了解到多重揹包可以轉換成01揹包來做,但是可以通過二進位制的思想來優化它,比如13可以拆分成2^0,2^1,2^2,6,這四個數組合可以得到1~13之間的任意整數,那麼就把13個物品成功轉化為了4個物品,那麼這題也是一樣的,將a1的個數拆分為2^0,2^1,...,之後當作一道01揹包來做
#include #include #include using namespace std;
const int maxn = 1000+10;
const int v = ;
int ans, dp[maxn], n[10], two[20] = ;
int max;
vectort;
int main()
if ( n[i] ) t.push_back(n[i]*v[i]);
}dp[0] = 1;
for (int i = 0; i < t.size(); i++)
}for (int i = 1; i <= max; i++)
ans += dp[i] ? 1 : 0;
cout << "total=" << ans << endl;
return 0;
}
洛谷 P2347 砝碼稱重
時間限制1.00s 記憶體限制125.00mb 設有1g 2g 3g 5g 10g 20g的砝碼各若干枚 其總重 1000 輸入 1 1 1 0 0 0 0 輸出 1 total 3 方法一 sign j a i 1 思想類似於裝箱問題 include using namespace std con...
洛谷P2347 砝碼稱重
設有1g1g1g 2g2g2g 3g3g3g 5g5g5g 10g10g10g 20g20g20g的砝碼各若干枚 其總重 1000 le 1000 1000 輸入格式 輸入方式 a1,a2,a3,a4,a5,a6a 1 a 2 a 3 a 4 a 5 a 6a1 a2 a3 a4 a5 a6 表示1...
P2347 砝碼稱重
題目入口 p2347 砝碼稱重 寫在前面 本題是乙個簡單的 多重揹包 不用二進位制優化也毫無關係 甚至據說六個迴圈都能過 逃 如何記錄方案數 if dp i i ret 解釋來說就是dp當前重量有 最優 方案說明此重量可實現,那麼結果加一 使用模版 模版 揹包問題彙總 多重揹包模版 二進位制優化 i...