zoukankan      html  css  js  c++  java
  • 01背包求解面值组成问题

    货币面值

    成绩 100 开启时间 2016年05月30日 星期一 06:10
    折扣 0.8 折扣时间 2016年05月30日 星期一 06:10
    允许迟交 关闭时间 2016年05月30日 星期一 06:10
    输入文件 Currency.in 输出文件 Currency.out

    【题目描述】货币面值(Currency.cpp/c/pas)九度OJ 1531

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

    【输入格式】

    输入包含多个测试用例,每组测试用例的第一行输入一个整数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

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int dp[10000+5];
    int a[100+5];
    int main(){
        freopen("Currency.in","r",stdin);
        freopen("Currency.out","w",stdout);
        int n;
        while(scanf("%d",&n)!=EOF){
          int MAX=0;
           memset(dp,0,sizeof(dp));
           for (int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            MAX+=a[i];
           }
           for (int i=1;i<=n;i++){
            for (int j=MAX;j>=a[i];j--){
                    dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
           }
        }
        for (int i=1;i<=MAX;i++){
            if(dp[i]!=i) {
                printf("%d ",i);
                break;
            }
        }
      }
    return 0;
    }

    当求解货币可组成的面值问题时,可用01背包求解

  • 相关阅读:
    【Base64】用 js 编 解 码 base64
    【ecshop】调用购物车商品数量
    【LNMP】 fileinfo扩展安装
    【Twitter接口】网站嵌入推特信息
    【新浪微博接口】网站接入微博秀
    【Node.js】Mac 下安装node图文详解
    【Select2】带搜索框的下拉框美化插件
    Java中食之无味弃之可惜的数组
    当我谈过年时,我该谈些什么?
    我没回老家过春节的那4点原因
  • 原文地址:https://www.cnblogs.com/lmjer/p/7988914.html
Copyright © 2011-2022 走看看