码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2018-06-07 19:18:02      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:memset   tps   ret   for   false   namespace   nbsp   输出   直接   

题目链接: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(完全背包模板题)

标签:memset   tps   ret   for   false   namespace   nbsp   输出   直接   

原文地址:https://www.cnblogs.com/Fy1999/p/9151970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!