zoukankan      html  css  js  c++  java
  • P1474 货币系统 Money Systems(完全背包)(大水题)

    题目描述

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

    传统地,一个货币系统是由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
    


    我好菜啊。第一眼觉得是个完全背包的模板。啊啊啊啊,自己硬生生的改成多重背包!!!!!n^3啊。傻逼了。

    废话不多说ac代码如下:
    #include<cstdio>
    #define ll long long
    ll dp[10020];
    int w[10020];
    int main()
    {
        int n, v;
        scanf("%d%d", &n, &v);
        for (int i = 1; i <= n; ++i)
            scanf("%d", &w[i]);
        dp[0] = 1;
        for (int i = 1; i <= n;++i)
        for (int j = w[i]; j <= v; ++j)
            dp[j] += dp[j - w[i]];
        printf("%lld\n", dp[v]);
    }
  • 相关阅读:
    HTML转义字符
    网站项目开发经验总结
    SQL SERVER事务处理
    5种方法在mac系统修改hosts文件
    用MPMoviePlayerController做在线音乐播放
    UISearchBar的使用心得
    10 个免费的 C/C++ 集成开发环境
    TableView有些属性的修改只能在init里面
    UIScrollView的正确使用方法
    设置UIView阴影shadow 边框 边框颜色
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/9463242.html
Copyright © 2011-2022 走看看