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
  • 相关阅读:
    windows2016优化
    oracle什么时候需要commit
    Mysql的锁表,锁行记录
    git add
    linux系统优化
    解决rsyslog启动问题
    HAProxy启用日志功能
    nc命令获取远端端口状态
    将pip源更换到国内镜像
    Centos7.6下安装Python3.7
  • 原文地址:https://www.cnblogs.com/cshg/p/5678868.html
Copyright © 2011-2022 走看看