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背包求解

  • 相关阅读:
    030-PHP日期查询函数
    029-PHP取随机数
    028-PHP常用数学函数abs和acos和asin
    027-PHP编码和解码函数base64
    026-PHP常用字符串函数(三)
    025-PHP常用字符串函数(二)
    024-PHP常用字符串函数(一)
    023-PHP常用数组函数
    022-PHP数组排序asort
    021-PHP常用的数值类型判断函数
  • 原文地址:https://www.cnblogs.com/lmjer/p/7988914.html
Copyright © 2011-2022 走看看