zoukankan      html  css  js  c++  java
  • 【洛谷】P1474 货币系统 Money Systems(背包dp)

    题目描述

    母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统。由于它们特殊的思考方式,它们对货币的数值感到好奇。

    传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单位面值组成的。

    母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值。

    举例来说, 使用一个货币系统 {1,2,5,10,...}产生 18单位面值的一些可能的方法是:18x1, 9x2, 8x2+2x1, 3x5+2+1,等等其它。 写一个程序来计算有多少种方法用给定的货币系统来构造一定数量的面值。保证总数将会适合long long (C/C++) 和 Int64 (Free Pascal),即在0 到2^63-1之间。

    输入输出格式

    输入格式:

    货币系统中货币的种类数目是 V (1<=V<=25)。要构造的数量钱是 N (1<= N<=10,000)。

    第一行: 二个整数,V 和 N 。

    第二行: 可用的货币的面值 。

    输出格式:

    输出格式:

    单独的一行包含那个可能的用这v种硬币凑足n单位货币的方案数。

    输入输出样例

    输入样例#1: 复制
    3 10
    1 2 5
    
    输出样例#1: 复制
    10
    

    说明

    翻译来自NOCOW

    USACO 2.3

    -------------------------------------------------------------------------------------

    分析:要开long long,还有别忘了设置dp[0]=1

     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 typedef long long ll;
     5 ll dp[10005],p[100];
     6 int main()
     7 {
     8     int v,n;
     9     scanf("%d%d",&v,&n);
    10     for(int i=1;i<=v;i++) scanf("%lld",&p[i]);
    11     dp[0]=1;
    12     for(int i=1;i<=v;i++)
    13         for(int j=p[i];j<=n;j++)
    14         dp[j]+=dp[j-p[i]];
    15     printf("%lld",dp[n]);
    16     return 0;
    17 }
  • 相关阅读:
    20160913
    20160912
    VI中的多行删除与复制(转)
    Linux 压缩文件 和解压文件
    开心消消乐兑换码 亲测
    房地产行业清洗公司 特殊词汇
    java 截取替换掉括号 包括括号中的内容
    numpy运算简介(一)
    numpy : random.rand 和 random.random 的区别
    numpy.random.seed()的使用解析
  • 原文地址:https://www.cnblogs.com/noblex/p/7728232.html
Copyright © 2011-2022 走看看