分组背包大雾

P1064 [NOIP2006 提高组] 金明的预算方案

Jacky2009 @ 2022-06-07 23:46:32

for(int i=1;i<=cnt;i++){
        for(int j=n;j>=0;j--){
            for(int k=0;k<vl2[i].size();k++){
                if(j<vl2[i][k].siz)continue;
                dp[j]=max(dp[j],dp[j-vl2[i][k].siz]+vl2[i][k].val);
            }
        }
    }

以上就是我用分组背包AC的核心代码。可见这用了滚动数组“优化”(bushi

然而删掉滚动数组变成

 for(int i=1;i<=cnt;i++){
        for(int j=n;j>=0;j--){
            for(int k=0;k<vl2[i].size();k++){
                if(j<vl2[i][k].siz)continue;
                dp[i][j]=max(dp[i][j],dp[i-1][j-vl2[i][k].siz]+vl2[i][k].val);
            }
        }
    }

就WA20pts了。 本蒟蒻十分大雾,希望各位神犇能给予援助。


by Rainybunny @ 2022-06-08 07:10:50

后面这个,从 dp[i-1][*] 转移到 dp[i][*] 最多只能取一个物品。第一维的变化应该和 i,j 都相关。


by 我是人999 @ 2022-06-20 21:57:45

转移时好像没有考虑这组物品都不取的情况?


|