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
    

    说明

    翻译来自NOCOW

    USACO 2.3

    求方案数类型完全背包

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define inf 2147483647
    const ll INF = 0x3f3f3f3f3f3f3f3fll;
    #define ri register int
    template <class T> inline T min(T a, T b, T c)
    {
        return min(min(a, b), c);
    }
    template <class T> inline T max(T a, T b, T c)
    {
        return max(max(a, b), c);
    }
    template <class T> inline T min(T a, T b, T c, T d)
    {
        return min(min(a, b), min(c, d));
    }
    template <class T> inline T max(T a, T b, T c, T d)
    {
        return max(max(a, b), max(c, d));
    }
    #define scanf1(x) scanf("%d", &x)
    #define scanf2(x, y) scanf("%d%d", &x, &y)
    #define scanf3(x, y, z) scanf("%d%d%d", &x, &y, &z)
    #define scanf4(x, y, z, X) scanf("%d%d%d%d", &x, &y, &z, &X)
    #define pi acos(-1)
    #define me(x, y) memset(x, y, sizeof(x));
    #define For(i, a, b) for (int i = a; i <= b; i++)
    #define FFor(i, a, b) for (int i = a; i >= b; i--)
    #define bug printf("***********
    ");
    #define mp make_pair
    #define pb push_back
    const int maxn = 10005;
    // name*******************************
    ll v,n;
    ll a[maxn];
    //int dp[maxn][maxn];
    ll dp[maxn];
    // function******************************
    
    
    //***************************************
    int main()
    {
    //    ios::sync_with_stdio(0);
    //    cin.tie(0);
        // freopen("test.txt", "r", stdin);
        //  freopen("outout.txt","w",stdout);
        cin>>v>>n;
        For(i,1,v)
        {
            cin>>a[i];
        }
        
        //一维优化
        dp[0]=1;
        For(i,1,v)
        {
            FFor(j,n,1)
            {
                for(int k=1; j-k*a[i]>=0; k++)//注意这里k要从1开始,从0开始的话就会重复
                {
                    dp[j]+=dp[j-a[i]*k];
                }
            }
        }
    
        cout<<dp[n];
        
    //二维未优化
    //    For(i,0,v)dp[i][0]=1;
    //    For(i,1,v)
    //    {
    //        For(j,1,n)
    //        {
    //            for(int k=0; j-k*a[i]>=0; k++)
    //            {
    //                dp[i][j]+=dp[i-1][j-a[i]*k];
    //                cout<<"i:"<<i<<" j:"<<j<<" k:"<<k<<" dp:"<<dp[i][j]<<endl;
    //            }
    //        }
    //    }
    //    cout<<dp[v][n];
    
        return 0;
    }
  • 相关阅读:
    c#之继承
    javascript post数据到WCF反馈json或者XML
    五:理解控件的运行机制(例:基于Control命名空间的简单控件)
    c#之委托和事件
    项目管理中的十一个原则
    Linq:基本语法group by, order by ,into(3)
    Linq:基本语法form ,select, where(2)
    PL/SQL学习笔记视图
    七:理解控件的运行机制(例:基于CompositeControl命名空间的控件)
    PL/SQL学习笔记常量变量及数据类型初步
  • 原文地址:https://www.cnblogs.com/planche/p/8613280.html
Copyright © 2011-2022 走看看