hdoj:2069

Coin Change

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 18271    Accepted Submission(s): 6291

Problem Description

Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent. We want to make changes with these coins for a given amount of money.

For example, if we have 11 cents, then we can make changes with one 10-cent coin and one 1-cent coin, or two 5-cent coins and one 1-cent coin, or one 5-cent coin and six 1-cent coins, or eleven 1-cent coins. So there are four ways of making changes for 11 cents with the above coins. Note that we count that there is one way of making change for zero cent.

Write a program to find the total number of different ways of making changes for any amount of money in cents. Your program should be able to handle up to 100 coins.

Input

The input file contains any number of lines, each one consisting of a number ( ≤250 ) for the amount of money in cents.

Output

For each input line, output a line containing the number of different ways of making changes with the above 5 types of coins.

Sample Input

11
26

Sample Output

4
13

找零钱问题,但是限制了一次找零的硬币数量

下面就直接暴力了

#include <iostream>

using namespace std;

const int Max = 251;
const int a[] = {1,5,10,25,50};
long dp[Max];

void change()
{
    dp[0] = 1;
    for (int m = 1; m <= Max; m++)
    {
        for (int i50 = 0; i50 <= m / 50; i50++)
        {
            for (int i25 = 0; i25 <= (m - i50 * 50) / 25; i25++)
            {
                for (int i10 = 0; i10 <= (m - i50 * 50 - i25 * 25) / 10; i10++)
                {
                    for (int i5 = 0; i5 <= (m - i50 * 50 - i25 * 25 - i10 * 10) / 5; i5++)
                    {
                        int i1 = m - i50 * 50 - i25 * 25 - i10 * 10 - i5 * 5;
                        if (i1 >= 0 && i1 + i5 + i10 + i25 + i50 <= 100)
                        {
                            dp[m]++;
                        }
                    }
                }
            }
        }
    }

}
int main()
{
    int money;
    change();
    while (cin >> money)
    {
        cout << dp[money] << endl;
    }
}
时间: 2024-10-29 02:47:28

hdoj:2069的相关文章

hdoj:2086

A1 = ? Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7535    Accepted Submission(s): 4675 Problem Description 有如下方程:Ai = (Ai-1 + Ai+1)/2 - Ci (i = 1, 2, 3, .... n).若给出A0, An+1, 和 C1, C2, .....

hdoj:2085

核反应堆 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 15706    Accepted Submission(s): 7036 Problem Description 某核反应堆有两类事件发生:高能质点碰击核子时,质点被吸收,放出3个高能质点和1个低能质点:低能质点碰击核子时,质点被吸收,放出2个高能质点和1个低能质点.假定开始的时

hdoj:2084

数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 39043    Accepted Submission(s): 23246 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

hdoj:2046

#include <iostream> using namespace std; long long fib(int n) { if (n == 1) return 1; if (n == 2) return 2; long long f1 = 1; long long f2 = 2; while (n >= 3) { long long f3 = f1 + f2; f1 = f2; f2 = f3; n--; } return f2; } int main() { int n; whi

hdoj:2045

#include <iostream> using namespace std; long long a[51]; int main() { int n; a[1] = 3; a[2] = 6; a[3] = 6; for (int i = 4; i <= 50; i++) { a[i] = a[i - 1] + 2 * a[i - 2]; } while (cin >> n) { cout << a[n] << endl; } }

hdoj:2042

#include <iostream> using namespace std; int main() { int n,a; while (cin >> n) { while (n--) { cin >> a; long num = pow(2, a) + 2; cout << num << endl; } } } a(n) = 2*a(n-1) -2 a(n) -2 = 2*{a(n-1) -2} a(n) = 2^n + 2

hdoj:2040

#include <iostream> #include <vector> using namespace std; vector<long> yueShu(long a) { vector<long> vec; vec.push_back(1); for (int i = 2; i < a; i++) { if (a%i == 0) { vec.push_back(i); //cout << i << " "

hdoj:2043

#include <iostream> #include <string> using namespace std; bool judgeSize(string str) { int size = str.size(); if (size < 8 || size>16) return false; return true; } int isA(string str) { for (auto &c : str) { if (c >= 'A' &&am

hdoj:2027

#include <iostream> #include <string> #include <vector> using namespace std; int main() { int n; cin >> n; string t; getline(cin, t); while (n >= 1) { string s; int a = 0, e = 0, i = 0, o = 0,u=0; getline(cin, s); for (char &