两种类型的背包问题模板(无限物品和0-1背包问题)

一、无限物品的背包问题:

memset(dp,-1,sizeof(dp));

int dpBag(int S) {
    int& ans = dp[S];
    if(ans >= 0) {
        return ans;
    }
    ans = 0;
    for(int i = 1; i <= n; i++) {
        if(S >= volumn[i]) {
            ans = max(ans, dpBag(S - volumn[i]) + weight[i]);
        }
    }
    return ans;
}

二、0-1背包问题:

memset(f,0,sizeof(f));

for(int i=1; i <= n; i++)
    for(int j=0; j<=C; j++)
    {
        f[i][j] = (i==1 ? 0 : f[i-1][j]);
        if(j >=V)
            f[i][j] =max(f[i][j],f[i-1][j-V]+W);

    }

你可能感兴趣的:(#,模板)