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 }
  • 相关阅读:
    973. K Closest Points to Origin
    919. Complete Binary Tree Inserter
    993. Cousins in Binary Tree
    20. Valid Parentheses
    141. Linked List Cycle
    912. Sort an Array
    各种排序方法总结
    509. Fibonacci Number
    374. Guess Number Higher or Lower
    238. Product of Array Except Self java solutions
  • 原文地址:https://www.cnblogs.com/noblex/p/7728232.html
Copyright © 2011-2022 走看看