Let Me Count The Ways

Description

After making a purchase at a large department store, Mel‘s change was 17 cents. He received 1 dime, 1 nickel, and 2 pennies. Later that day, he was shopping at a convenience store. Again his change was 17 cents.
This time he received 2 nickels and 7 pennies. He began to wonder ‘ "How many stores can I shop in and receive 17 cents change in a different configuration of coins? After a suitable mental struggle, he decided the answer was 6. He then challenged you to consider
the general problem.

Write a program which will determine the number of different combinations of US coins (penny: 1c, nickel: 5c, dime: 10c, quarter: 25c, half-dollar: 50c) which may be used to produce a given amount of money.

Input

The input will consist of a set of numbers between 0 and 30000 inclusive, one per line in the input file.

Output

The output will consist of the appropriate statement from the selection below on a single line in the output file for each input value. The number m is the number your program computes, n is
the input value.

There are mways to produce ncents change.

There is only 1 way to produce ncents change.

Sample input

17
11
4

Sample output

There are 6 ways to produce 17 cents change.
There are 4 ways to produce 11 cents change.
There is only 1 way to produce 4 cents change.

题目大意:

就是给你一个数,分别用1 5 10 25 50 相加有多少种方法可以加到这个数。

思路:

一个简单的完全背包问题,每种物品有无限件,还是根据01背包改变下次次序就可以。注意输出,这个是个坑。

当数为0的时候输出的也是1。

代码:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <queue>
#include <map>
#include <cmath>
#include <string>
#define INF 0x3f3f3f3f
using namespace std;

int main()
{
    int coin[5] = {1, 5, 10, 25, 50},i,j,n;
    long long dp[30010];
    while(scanf("%d",&n) != EOF)
    {
        for(i = 1; i <= n; i++)
            dp[i] = 1;
        dp[0] = 1;
        for(i = 1; i < 5; i++)
        {

            for(j = coin[i]; j <= n; j++)
            {
                dp[j] = dp[j - coin[i]] + dp[j];
            }
        }
        if(dp[n] !=  1)
            printf("There are %lld ways to produce %d cents change.\n",dp[n],n);
        else
            printf("There is only %lld way to produce %d cents change.\n",dp[n],n);
    }
    return 0;
}
时间: 2024-10-11 00:40:06

Let Me Count The Ways的相关文章

uva357 Let Me Count The Ways

注意PE-- #include<iostream> #include<map> #include<string> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath> #include<queue> #include<vector> #include<algorithm> using namespace

uva 357 Let Me Count The Ways (DP)

uva 357 Let Me Count The Ways After making a purchase at a large department store, Mel's change was 17 cents. He received 1 dime, 1 nickel, and 2 pennies. Later that day, he was shopping at a convenience store. Again his change was 17 cents. This tim

UVA - 357Let Me Count The Ways(完全背包)

题目:UVA - 357Let Me Count The Ways(完全背包) 题目大意:给出N,问用1, 5, 10, 25, 50,这些硬币能够凑出N的方式有多少种. 代码: #include <cstdio> #include <cstring> const int N = 5; const int maxn = 30005; const int coin[N] = {1, 5, 10, 25, 50}; typedef long long ll; ll f[maxn]; v

UVA 357 Let Me Count The Ways(完全背包)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=293 题意: 有5种硬币: 1分 5分 10分 25分 和50分. 现在给你一个面值n, 问你有多少种方法能利用上述硬币组合出n分的金钱. 分析: 典型的完全背包问题. 本题的限制条件: 硬币钱数正好等于n 本题的目的条件: 求有多少种组合方法. 所以我们令dp[i][j]==x 表示用前i种

UVA 357 Let Me Count The Ways

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=5&page=show_problem&problem=293 Dynamic programming 注意overflow. 代码如下: 1 //============================================================================ 2 //

SICP-1.7-递归函数

递归函数 函数内部直接或间接的调用函数自身 将复杂问题简单化 例子程序 def sum_digits(n): """Return the sum of the digits of positive integer n.""" if n < 10: return n else: all_but_last, last = n // 10, n % 10 return sum_digits(all_but_last) + last 各位数字之和问

算法入门经典大赛 Dynamic Programming

111 - History Grading LCS 103 - Stacking Boxes 最多能叠多少个box DAG最长路 10405 - Longest Common Subsequence LCS 674 - Coin Change 全然背包求方案数 10003  - Cutting Sticks 区间DP dp[l][r]代表分割l到r的最小费用 116 - Unidirectional TSP 简单递推 输出字典序最小解 从后往前推 10131 - Is Bigger Smarte

UVA题目分类

题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics 10300 - Ecological Premium 458 - The Decoder 494 - Kindergarten Counting Game 414 - Machined Surfaces 490 - Rotating Sentences 445 - Marvelous Mazes

wine习得知识小记

1. VS2008: sizeof cout:56 sizeof cin:60 sizeof streamsize: 4 VS2012 sizeof cout:80 sizeof cin:96 sizeof streamsize: 8 这样就很明显了,为了支持大的stream而故意引入streamsize的改变. 2. 以前初学C\C++用pow函数的时候也有点疑惑,为什么参数int要转化成double,以为是系统规定的,当时为了编译能过就用了转换了,也没有看源代码的想法.今天看了HongQia