zoukankan      html  css  js  c++  java
  • 货币系统问题 (完全背包)

    题目描述

      货币是在国家或经济体内的物资与服务交换中充当等价物,或是偿还债务的特殊商品,是用作交易媒介、储藏价值和记账单位的一种工具。魔法世界的货币的历史,可以追溯至史前以物易物的阶段,后来经过金属货币、金银、纸币以及金银本位制度,演化至现代的货币体系,现已知魔法世界的货币系统有V种面值,求组成面值为N的货币有多少种方案。

    输入

    第一行为两个整数V和N,V是货币种类数目,1≤V≤25,N是要构造的面值,1≤N≤1000。

    第二行为V种货币的面值。

    输出

    输出方案数。

    样例输入

    3 10
    1 2 5
    

    样例输出

    10

    令dp[i][v]表示用前i种硬币能表示v数量货币的方法数,则对第i种硬币也有选和不选的策略,而总的方案数为二者之和,因此可得状态转移方程:

    dp[i][v]=dp[i-1][v]+dp[i][v-w[i]]    (1<=i<=n,w[i]<=v<=V)

    边界dp[1][v]=1(其余dp初始皆为0)

    去掉i维进行优化:dp[j]=dp[j]+dp[j-val[i]];   dp[0]=1;

     
    #include <iostream>
    
    using namespace std;
    int val[25];
    long long dp[10008]={0};
    int main()
    {
        int m,n,cnt=0;
        cin>>n>>m;
        for(int i=0;i<n;i++)
        {
            cin>>val[i];
        }
        dp[0]=1;
        for(int i=0;i<n;i++)
        {
            for(int j=val[i];j<=m;j++)
            {
                dp[j]+=dp[j-val[i]];
            }
        }
        cout<<dp[m]<<endl;
        return 0;
    }
     
  • 相关阅读:
    POJ 1703 Find them, Catch them
    POJ 2236 Wireless Network
    POJ 2010 Moo University
    POJ 2184 Cow Exhibition
    POJ 3280 Cheapest Palindrome
    POJ 3009 Curling 2.0
    POJ 3669 Meteor Shower
    POJ 2718 Smallest Difference
    POJ 3187 Backward Digit Sums
    POJ 3050 Hopscotch
  • 原文地址:https://www.cnblogs.com/albert-biu/p/8461541.html
Copyright © 2011-2022 走看看