01背包
int w[maxn]物品的重量
int v[maxn]物品的价值
int dp[maxn][maxn]
int c背包容量n物品数
for(int i=1;i<=n;++i)
{
for(int j=1;j<=c;++j)
{
if(j<w[i])
{
d[i][j]=dp[i-1][j];
}
else
{
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i];
}
}
}
完全背包
for(int i=1;i<=n;++i)
{
for(int j=c;j>=w[i];–j)
{
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
}
}
多重背包
neww[num]新物品的质量newv[num]新物品的价值
for(int i=1;i<=n;++i)
{
for(int j=1;j<=a[i];j*=2)
{
num++;
neww[num]=w[i]*j;
newv[num]=v[i]*j;
a[i]-=j;
}
if(a[i])
{
num++;
neww[num]=w[i]*a[i];
newv[num]=v[i]*a[i];
}
}
for(int i=1;i<=num;++i)
{
for(int j=c;j>=neww[i];–j)
{
dp[j]=max(dp[j],dp[j-neww[num]]+newv[num]);
}
}
背包
最新推荐文章于 2024-04-09 12:16:57 发布