zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    平衡的括号(栈)
    二叉树遍历
    Ohana Cleans Up0101
    Missing number
    Django框架之模板层
    Django框架之路由层、视图层
    Django框架
    Django初识
    前端之bootstrap
    前端之BOM、DOM
  • 原文地址:https://www.cnblogs.com/Fy1999/p/9151970.html
Copyright © 2011-2022 走看看