poj1276 Cash Machine(完全背包模板题)

Posted Fy1999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1276 Cash Machine(完全背包模板题)相关的知识,希望对你有一定的参考价值。

题目链接:https://vjudge.net/problem/POJ-1276

题意:有现今cash,和n种钱币,每种钱币有ni个,价值为di,求各种钱币组成的不超过cash的最大钱数.......

思路:二进制拆分转化为01背包,或者转化为完全背包都是可以的

完全背包:

//这题可以让w,v从i=1时开始,这样f[0]=0,当cash=0或n=0时直接输出0
//定义一个num数组来让它存储还剩下多少个数

#include <iostream>
#include <cstring>

using namespace std;

const int maxn=1000+10;

int cash,n;
int w[maxn],v[maxn];
int f[maxn*100],num[maxn*100];

int main()
{
    ios::sync_with_stdio(false);
    while(cin>>cash>>n)
    {
        memset(f,0,sizeof(f));
        for(int i=1;i<=n;i++)
        {
            cin>>w[i]>>v[i];
        }

        for(int i=1;i<=n;i++)
        {
            memset(num,0,sizeof(num));
            for(int j=v[i];j<=cash;j++)
            {
                if(f[j]<f[j-v[i]]+v[i]&&num[j-v[i]]<w[i])
                {
                    f[j]=f[j-v[i]]+v[i];
                    num[j]=num[j-v[i]]+1;
                }
            }
        }
        cout<<f[cash]<<endl;
    }
    return 0;
}

 

以上是关于poj1276 Cash Machine(完全背包模板题)的主要内容,如果未能解决你的问题,请参考以下文章

POJ - 1276 Cash Machine(多重背包)

poj 1276 Cash Machine(多重背包)

poj1276--Cash Machine--多重背包

POJ-1276 Cash Machine 多重背包 二进制优化

POJ 1276 Cash Machine(多重背包的二进制优化)

Cash Machine POJ - 1276 多重背包二进制优化