zoukankan      html  css  js  c++  java
  • 货币系统(money) 背包问题

    货币系统(money)

    题目描述

    母牛们不但创建了它们自己的政府,而且选择建立了自己的货币系统。它们对货币的数值感到好奇。传统地,一个货币系统是由1,5,10,20或25,50,100的单位面值组成的。母牛想知道用货币系统中的货币来构造一个确定的面值,有多少种不同的方法。
    举例来说,使用一个货币系统{1,2,5,10,…}产生18单位面值的一些可能的方法是:18×1,9×2,8×2+2×1,3×5+2+1等等。写一个程序,计算用给定的货币系统来构造一个确定的面值有多少种方法。

    输入

    第1行有两个整数V,n,其中v(1≤V≤25)表示货币系统中货币的种类,n是要构造的面值(1≤n≤10000);
    第2~v+l行:表示可用的货币面值(每行一个)。

    输出

    输出方案总数。

    样例输入

    3 10
    1
    2
    5
    

    样例输出

    10

    背包问题
    这类题:你有N个XXX, 要你构成MMM, 问你有多少种方法。
    具体可以看《背包九讲》, 这有个pdf链接, 戳我
    代码如下
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
     
    const int maxn = 10002;
    int main()
    {
        long long int n, V;
        long long int a[40], dp[maxn];
        scanf("%lld%lld", &V, &n);
        for(int i = 0; i < V; i++){
            scanf("%lld", &a[i]);
        }
        sort(a, a+V);
        memset(dp, 0, sizeof(dp));
        dp[0] = 1;
        for(int i = 0; i < V; i++){
            for(int j = a[i]; j <=n; j++){
                dp[j] = dp[j] + dp[j-a[i]];
            }
        }
            printf("%lld
    ", dp[n]);
     
        return 0;
    }
     
    View Code
  • 相关阅读:
    Cheatsheet: 2013 12.01 ~ 12.16
    Cheatsheet: 2013 11.12 ~ 11.30
    Cheatsheet: 2013 11.01 ~ 11.11
    Cheatsheet: 2013 10.24 ~ 10.31
    Cheatsheet: 2013 10.09 ~ 10.23
    Cheatsheet: 2013 10.01 ~ 10.08
    Cheatsheet: 2013 09.22 ~ 09.30
    Cheatsheet: 2013 09.10 ~ 09.21
    Cheatsheet: 2013 09.01 ~ 09.09
    Cheatsheet: 2013 08.20 ~ 08.31
  • 原文地址:https://www.cnblogs.com/cshg/p/5678868.html
Copyright © 2011-2022 走看看