傳送門:
通天之分組揹包,送你上青天。
設f[k][v]表示前k組物品花費費用為v時能獲得的最大值
則有f[k][v] = max(f[k-1][v],f[k-1][v-c[i]]+w[i]) 其中i屬於第k組
根據一維01揹包可知此揹包同樣可以降維
設一陣列d[k][i]表示第k組依次存了哪幾號物品
當i=0時,d[k][0]表示第k組物品有幾件
**如下,迴圈層次不可改變
#include#includeusing
namespace
std;
int m,n,a[1001],b[1001],c,d[1001][1001],sum,f[1001
];int
main()
for(int k = 1;k <= sum;k++)
for(int j = m;j >= 0;j--)
for(int i = 1;i <= d[k][0];i++)
if(j-a[d[k][i]] >= 0
) f[j] = max(f[j],f[j-a[d[k][i]]] +b[d[k][i]]);
printf("%d
",f[m]);
return
0;
}
通天之分組揹包
nasa 美國航空航天局 因為太空梭的隔熱瓦等其他安全技術問題一直大傷腦筋,因此在各方壓力下終止了太空梭的歷史,但是此類事情會不會在以後發生,誰也無法保證,在遇到這類航天問題時,解決方法也許只能讓航天員出倉維修,但是多次的維修會消耗航天員大量的能量,因此nasa便想設計一種食品方案,讓體積和承重有限...
通天之分組揹包 分組揹包
本人水平有限,題解不到為處,請多多諒解 本蒟蒻謝謝大家 題目 傳送門 分組揹包的模板 偽 1 for int i 1 i 組數 i 6 7 直接套模板即可。code 1 include2 pragma gcc optimize 3 3const int n 1e5 10 4 using namesp...
洛谷 1757 通天之分組揹包 分組揹包
題意 n件物品,揹包可容納重量為m的物品 每件物品有重量wi,價值vi,所屬組別gi 同個組中的物品只能拿一件 問最大價值 題解 正常01揹包的寫法是 for i 列舉每個物品 for j 倒序列舉揹包容量 f j max f j f j w i v i 在分組揹包中,同個組中的物品互斥只能拿一件。...