您的位置:首页 > 其它

01背包、完全背包、多重背包模版。

2015-02-18 14:09 281 查看
01背包模版

int c[maxn],v[maxn],dp[maxn],n1[maxn],V;
void ZeroOnepack(int c,int v)//01背包
{
for(int i = V ; i >= c ; i--)
dp[i] = max(dp[i],dp[i-c]+v);
}


完全背包模版

int c[maxn],v[maxn],dp[maxn],n1[maxn],V;
void CompletePack(int c, int v)//完全背包
{
for(int i = c ; i <= V ; i++)
dp[i] = max(dp[i],dp[i-c]+v);
}


多重背包

int c[maxn],v[maxn],dp[maxn],n1[maxn],V;
void MultiplePack(int c,int v,int n1)//多重背包
{
if(c*n1>=V)
{
CompletePack(c,v);
return ;
}
else
{
int k = 1 ;
while (k <= n1)
{
ZeroOnepack(c*k,v*k);
n1 -= k;
k <<= 1;
}
ZeroOnepack(c*n1,v*n1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 背包模版 背包