列表

详情


NC24837. [USACO 2009 Mar B]Dairy Queen

描述

Bessie, always in need of an income, has decided to leverage her dairy skills by taking a part-time job at the local Dairy Queen restaurant. She is running a special cash register (since she has
hooves instead of fingers and thus requires special accommodation). Her job is making change for customers as they make a purchase.
As she was counting out 83 cents in change, she wondered: "How many ways can I count out 83 cents? I can use three quarters and eight pennies, seven dimes and three pennies, 83 pennies... there must be a zillion ways!"
How many different ways can one make change for N (1 <= N <= 300) cents using coins from a set of C (1 <= C <= 8) coins of supplied values C_i (1 <= C_i <= 200)? "Different" means differing counts of coins.
Thus, 8 cents can be made, in American currency, with 1 five-cent piece + 3 one-cent pieces and also with 8 one-cent pieces. Using 3 one-cent pieces + 1 five-cent piece is the same as 1 five-cent piece + 3 one-cent pieces, so one can create eight cents in just two different ways. Note that some coin systems are poor at making change and result in an answer of '0'.
Coin values in the input file are listed in descending order from largest to smallest. All coin values will be distinct.
HINT: Consider recursion as a solution technique.

输入描述

* Line 1: Two space-separated integers: N and C
* Lines 2..C+1: Line i+1 contains a single integer: C_i

输出描述

* Line 1: A single line with a single integer that is the number of ways to create N cents of change using the supplied coins. The answer is guaranteed to fit into a signed 32-bit integer.

示例1

输入:

83 5
50
25
10
5
1

输出:

159

说明:

Here are 15 of the 159 ways of making 83 cents:
0 x 50 0 x 25 0 x 10 0 x 5 83 x 1
0 x 50 0 x 25 0 x 10 1 x 5 78 x 1
0 x 50 0 x 25 0 x 10 2 x 5 73 x 1
0 x 50 0 x 25 0 x 10 3 x 5 68 x 1
0 x 50 0 x 25 0 x 10 4 x 5 63 x 1
0 x 50 0 x 25 0 x 10 5 x 5 58 x 1
0 x 50 0 x 25 0 x 10 6 x 5 53 x 1
0 x 50 0 x 25 0 x 10 7 x 5 48 x 1
0 x 50 0 x 25 0 x 10 8 x 5 43 x 1
0 x 50 0 x 25 0 x 10 9 x 5 38 x 1
0 x 50 0 x 25 0 x 10 10 x 5 33 x 1
0 x 50 0 x 25 0 x 10 11 x 5 28 x 1
0 x 50 0 x 25 0 x 10 12 x 5 23 x 1
0 x 50 0 x 25 0 x 10 13 x 5 18 x 1
0 x 50 0 x 25 0 x 10 14 x 5 13 x 1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 500K, 提交时间: 2019-09-09 21:18:21

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n,c,cc;
	int a[305];
	cin>>n>>c;
	memset(a,0,sizeof(a));
	for(int i=1;i<=c;i++)
	{
		cin>>cc;
		a[cc]++;
		for(int j=cc+1;j<=n;j++)
		a[j]=a[j]+a[j-cc];
	}
	cout<<a[n]<<endl;
}

C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 592K, 提交时间: 2020-02-26 18:23:12

#include<bits/stdc++.h>
using namespace std;
int c,n,ans,dp[200001];
int main()
{
	cin>>ans>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>c;
		dp[c]++;
		for(int j=c+1;j<=ans;j++) dp[j]+=dp[j-c];
	}
	cout<<dp[ans];
}

上一题