zoukankan      html  css  js  c++  java
  • 【动态规划】货币面值

     【动态规划】货币面值

    时间限制: 1 Sec  内存限制: 64 MB

    题目描述

    魔法世界发行了很多不同面值的纸币,试求出用这些纸币进行任意的组合不能表示的最小面值是多少。

    输入

    输入包含多个测试用例,每组测试用例的第一行输入一个整数N(N≤100)表示流通的纸币面额数量,第二行是N个纸币的具体表示面额,取值范围为1~100。

    输出

    对于每组测试用例,输出一个整数,表示已经发行的所有纸币都不能表示的最小面值(已经发行的每个纸币面值最多只能使用一次,但面值可能有重复)。

    样例输入

    5
    1 2 3 9 100
    5
    1 2 4 9 100
    5
    1 2 4 7 100
    

    样例输出

    7
    8
    15

    分析:相当于简单0-1背包问题恰好凑够j元
    #include <iostream>
    #define INF 0x3f3f3f3f
    using namespace std;
    int m,a[111],f[11111];
    
    void OneZeroPack(int m,int v,int w)
    {
        for(int i=m;i>=v;i--)
            f[i]=max(f[i],f[i-v]+w);
    }
    
    int main()
    {
        while(cin>>m)
        {
            for(int i=0;i<m;i++)
                cin>>a[i];
            for(int i=1;i<m*100+1;i++)    f[i]=-INF;
            f[0]=0;
            for(int i=0;i<m;i++)
                OneZeroPack(m*100,a[i],a[i]);
            for(int i=0;i<m*100+1;i++)
            {
                if(f[i]<0)
                {
                    cout<<i<<endl;
                    break;
                }
            }
        }
        return 0;
    }
     
  • 相关阅读:
    topcoder srm 681 div1
    topcoder srm 683 div1
    topcoder srm 684 div1
    topcoder srm 715 div1
    topcoder srm 685 div1
    topcoder srm 687 div1
    topcoder srm 688 div1
    topcoder srm 689 div1
    topcoder srm 686 div1
    topcoder srm 690 div1 -3
  • 原文地址:https://www.cnblogs.com/asuml/p/5733771.html
Copyright © 2011-2022 走看看