【动态规划】【背包模板】

来源:互联网 发布:古剑奇谭灵兽进阶数据 编辑:程序博客网 时间:2024/06/07 11:21

ACM模板

void CompletePack(int cost,int weight,int V){//完全背包    int i;    for( i = cost; i <= V;i ++)        dp[i] = max(dp[i],dp[i-cost]+weight);    return ;}void ZeroOnePack(int cost,int weight,int V){//01背包    int i;    for( i = V; i >= cost; i --)        dp[i] = max(dp[i],dp[i-cost]+weight);    return ;}MultiplePack(int v[],int w[],int num[],int n,int V){//多重背包    memset(dp,0,sizeof(dp));    for(i = 1; i <= n; i ++)    {        if(v[i]*num[i] > V)        {            CompletePack(v[i],w[i],V);        }        else        {            int k = 1;            while( k < num[i])            {                ZeroOnePack(k*v[i],k*w[i],V);                num[i] -= k;                k*= 2;            }            ZeroOnePack(num[i]*v[i],num[i]*w[i],V);        }    }    return dp[V];}
原创粉丝点击