`
Simone_chou
  • 浏览: 192660 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Money Systems(DP)

 
阅读更多
Money Systems

The cows have not only created their own government but they have chosen to create their own money system. In their own rebellious way, they are curious about values of coinage. Traditionally, coins come in values like 1, 5, 10, 20 or 25, 50, and 100 units, sometimes with a 2 unit coin thrown in for good measure.

The cows want to know how many different ways it is possible to dispense a certain amount of money using various coin systems. For instance, using a system of {1, 2, 5, 10, ...} it is possible to create 18 units several different ways, including: 18x1, 9x2, 8x2+2x1, 3x5+2+1, and many others.

Write a program to compute how many ways to construct a given amount of money using supplied coinage. It is guaranteed that the total will fit into both a signed long long (C/C++) and Int64 (Free Pascal).

PROGRAM NAME: money

INPUT FORMAT

The number of coins in the system is V (1 <= V <= 25).

The amount money to construct is N (1 <= N <= 10,000).

Line 1: Two integers, V and N
Lines 2..: V integers that represent the available coins (no particular number of integers per line)

 

SAMPLE INPUT (file money.in)

3 10
1 2 5

OUTPUT FORMAT

A single line containing the total number of ways to construct N money units using V coins.

SAMPLE OUTPUT (file money.out)

10

 

    题意:

    给出V(1 ~ 25),N(1 ~ 10000),代表有 V 种货币,N 的钱数,后给出这 V 种货币,每种货币的提供量无限。输出有多少凑钱数的方法刚好达到 N 这么多钱。

 

    思路:

    DP。完全背包。

    设 dp[ i ][ j ] 代表当选择第 i 种钱币时,凑足 j 元钱的方法数。同0,1背包的思路相似,每种钱币都有两种选择情况,选或者不选。

    选:设 k 代表可以选择 k 张 i 的钱币,所以 dp [ i ][ j ] += dp [ i - 1 ][ j - k * mon[ i ] ] ;

    不选:dp [ i ][ j ] += dp [ i - 1 ][ j ] ;

    循环 K 的时候从0开始即可以两种都一起考虑到了,因为 0 即代表不选。 注意方法数用 long long 即可。

 

    AC:

/*
TASK:money
LANG:C++
ID:sum-g1
*/
#include<stdio.h>
#include<string.h>
long long dp[30][10005];
int mon[30];

int main()
{
    freopen("money.in","r",stdin);
    freopen("money.out","w",stdout);
    int v,n;
    scanf("%d%d",&v,&n);
    memset(dp,0,sizeof(dp));
    for(int i = 0;i <= v;i++)   dp[i][0] = 1;
    for(int i = 1;i <= v;i++)
        scanf("%d",&mon[i]);
    for(int i = 1;i <= v;i++)
    {
        for(int j = 1;j <= n;j++)
        {
            for(int k = 0;k * mon[i] <= j;k++)
                dp[i][j] += dp[i - 1][j - k * mon[i]];
        }
    }
    printf("%lld\n",dp[v][n]);
}

 

 

分享到:
评论

相关推荐

    Joda-Money-用于表示货币金额的Java库

    **Joda-Money库详解** Joda-Money是一款专门针对Java平台设计的开源库,用于高效、方便地处理和表示货币金额。它为Java开发者提供了一套强大的工具,以应对在金融计算和货币操作中遇到的各种挑战。在这个库中,货币...

    Money游戏Money游戏Money游戏

    Money游戏Money游戏Money游戏

    Money TextBox.rar_Money_ Money_ Money

    在这个“Money TextBox.rar_Money_ Money_ Money”项目中,我们聚焦于在Windows Forms应用中处理货币输入的特殊控件,即“Money TextBox”。这个控件设计用于确保用户能够精确、格式化地输入货币值,同时提供验证...

    CONVERT_MONEY.rar_Money_ Money_ Money

    标题"CONVERT_MONEY.rar_Money_ Money_ Money"暗示了这个压缩包可能包含了一个关于金额转换的程序或代码示例。 描述中提到的“将以分为单位输入的数值转换为大写汉字形式”是指将小数形式的金额(例如,2500.00代表...

    支持javax.money数据类型的JSON序列化和反序列化

    `javax.money`是JSR 354(Java Money and Currency API)的一部分,它提供了一个统一的API来处理货币和货币值。这个API支持多货币环境,可以处理复杂的货币计算,如货币转换、货币比较和格式化。在使用`Jackson-...

    Laravel开发-laravel-money

    在Laravel框架中,"laravel-money"是一个用于处理货币计算和格式化的库,尤其适合在电子商务或财务应用中使用。这个库提供了便利的方法来处理货币的加减、转换和格式化,使得开发者能更专注于业务逻辑,而不是基础的...

    sql.rar_Money_ Money_ Money

    在这个名为"sql.rar_Money_ Money_ Money"的压缩包中,我们可以推断它包含与金融或金钱相关的数据库操作示例。这里我们将深入探讨SQL在数据库管理、数据查询以及与金钱相关的业务操作中的应用。 首先,描述中提到了...

    Money&You财富和家庭同样重要

    Money&You是风靡全球三十多年的美国课程。套用内地一个说法,这个课程一手谈“mon e y ” ,一手谈“you”,主张“两手都要硬”。 每位Money&You毕业生在上完课程时的一个感观都是:“我早就应该来上Money&You,如果我...

    Ram.zip_Money_ Money_ Money

    在IT行业中,涉及到“Ram.zip_Money_ Money_ Money”这样的标题时,我们可以推测这是一个与资金、财务或者可能与某种游戏或应用相关的压缩文件。"Money_ Money_ Money"的标签进一步强调了这一点,暗示内容可能与金钱...

    luckymoney.zip

    《SpringBoot入门实战:luckymoney.zip项目解析》 在当今的Java开发领域,Spring Boot以其简洁、高效、开箱即用的特点深受开发者喜爱。它极大地简化了Spring应用的初始搭建以及开发过程,使得开发者能够更快地专注...

    money-amount.rar_Money_ Money_ Money

    本文将深入探讨一个名为"money-amount.rar"的压缩包文件,该文件包含了使用MATLAB进行图像处理以计算图像中货币数量的代码实例,其主要标签为"money money money"。 MATLAB是一种强大的数学计算和数据分析工具,...

    Ruby-Money一个Ruby库来处理货币和货币转换

    Ruby-Money库是一个专门为Ruby编程语言设计的强大工具,它专注于处理货币相关的运算和货币转换。这个库被广泛用于需要精确管理货币数据的应用程序,比如电子商务、财务系统或者任何涉及金融交易的项目。在Ruby社区中...

    定义一个Money类:缺省函数,重载运算符

    - `Money operator+(Money &a1, Money &a2)`:重载了加法运算符,实现两个`Money`对象相加的操作。该函数接收两个`Money`类型的引用作为参数,返回一个新的`Money`对象,其值为这两个`Money`对象的和。 #### 3. ...

    dev-c.rar_Money_ Money_ Money

    《自动取款机程序开发详解——以Money为中心》 在当今信息化社会,货币交易的便捷性至关重要,自动取款机(Automated Teller Machine,ATM)作为银行服务的重要组成部分,其背后的程序设计自然成为了IT领域的核心...

    translate-the-money.rar_Money_ Money_ Money_金额大写_金额转换

    "Money Money Money_金额大写_金额转换"这一主题,正是关注如何将小写的数字金额转换成汉字大写的表达方式,以便于在正式的财务文档中使用。 金额转换的核心在于理解数字与汉字之间的对应关系。在中文里,数字一到...

    CMOS VLSI Design A Circuits and Systems Perspective

    标题中提到的《CMOS VLSI Design: A Circuits and Systems Perspective》是一本专业的电子工程和计算机科学领域教材,作者是Neil H.E. Weste和David Money Harris。这本书深入探讨了CMOS(互补金属氧化物半导体)...

    jackson-datatype-money, 扩展模块以正确支持 javax.money的数据类型.zip

    jackson-datatype-money, 扩展模块以正确支持 javax.money的数据类型 的数据类型货币 Jackson数据类型 Money Jackson是一个支持JSON序列化和反序列化 JavaMoney用户定义的数据类型的Jackson 。 它充满了一个位置,它...

    EX MONEY_exchange_

    《EX MONEY_exchange_:Delphi实现的货币兑换程序解析》 在信息技术领域,尤其是软件开发中,各种工具和编程语言的运用是至关重要的。本文将深入探讨一个名为"EX MONEY_exchange_"的项目,这是一个用Delphi编写的...

Global site tag (gtag.js) - Google Analytics