• 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]);
    }
  • 相关阅读:
    为什么常见编程语言中数组的索引都是从0开始?
    【转载】计算机经典论文选读
    Jetbrains-别人家的公司
    2019.9沉淀反思
    HttpUrlConnection流传输问题(正确传输包含中文的JSON字符串)
    记一次SpringBoot启动缓慢问题的解决过程
    Maven发布jar包到私库
    2016年回顾
    Java集合框架源码分析之ArrayList
    关于哔哩哔哩直播姬
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/9463242.html
Copyright © 2020-2023  润新知