多重背包
我擦,TLE ,N次,最后是因为自己读题忽略一个条件,遇见负数就终止
结果自己根据用例,判断成遇见-1了,雪崩。!!
总结一下,如果TLE 原因可能如下: 1,程序确实超时, 2. 程序结束条件不对,检查跳出循环的条件。
套用模板
while(scanf(“%d”)!=EOF){ if(n<0) break;}
01背包
for(int i=1;i<=n;i++)
for(int v=V;v>=value[i];v--{
dp[v]=max(dp[v],dp[v-c[i]]+value[i];
}
完全背包
for(int i=1;i<=n;i++)
for(int v=value[i];v<=V;v--{
dp[v]=max(dp[v],dp[v-c[i]]+value[i];
}
多重背包
for(int i=1;i<=n;i++)
for(int v=value[i];v<=V;v--{
for(int k=0;k<=h[i]&&k*c[i]<=v;k++)
dp[v]=max(dp[v],dp[v-k*c[i]]+k*value[i];
}
还有一种多重背包解法: //TODO 明天更
这里写代码片