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

    问题 L: 【动态规划】货币面值

    时间限制: 1 Sec  内存限制: 64 MB
    提交: 115  解决: 43
    [提交] [状态] [讨论版] [命题人:]

    题目描述

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

    输入

    输入包含多个测试用例,每组测试用例的第一行输入一个整数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
    
    分析:01背包,凑够j元即可。
    #include <iostream>
    #include <string>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <deque>
    #include <map>
    #define range(i,a,b) for(int i=a;i<=b;++i)
    #define LL long long
    #define rerange(i,a,b) for(int i=a;i>=b;--i)
    #define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
    using namespace std;
    int n,a[105],dp[10005];
    void init(){
    
    }
    void solve(){
        while(cin>>n){
            range(i,0,n-1)cin>>a[i];
            range(i,1,n*100)dp[i]=-0x7f7f7f7f;
            dp[0]=0;
            range(i,0,n-1)
            rerange(j,n*100,a[i])dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
            range(i,0,n*100-1)if(dp[i]<0){
                cout<<i<<endl;
                break;
            }
        }
    }
    int main() {
        init();
        solve();
        return 0;
    }
    View Code
  • 相关阅读:
    Dll 入口函数
    .net中Global.asax
    jquery图片翻转
    c#发送邮件
    jquery ajax里面的datetype设成json时,提交不了数据的问题
    今儿写前台tab效果时用的,(jquery)
    C# 的一些常用日期时间函数(老用不熟)
    下午的表单注册~~~
    CSS图片、文字垂直居中对齐
    asp.net 用继承方法实现页面判断session
  • 原文地址:https://www.cnblogs.com/Rhythm-/p/9347384.html
Copyright © 2011-2022 走看看