钱币兑换问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6538 Accepted Submission(s): 3780
Problem Description
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
Input
每行只有一个正整数N,N小于32768。
Output
对应每个输入,输出兑换方法数。
Sample Input
2934
12553
Sample Output
718831
13137761
1,先确定3分硬币的最大值,然后求出每一种3分硬币取的值时二分硬币能取的最大值,即此时取二分硬币的种数为2分币的最大值加一(二分币可以取零)。将所有二分币此时的总数累加即得最终值。(将题目转换为根据3分币的取值情况求二分币的情况总数)
2,网上看别人的代码据说这是一个完全背包问题,好吧,现在水平不够,还看不太懂,有兴趣的同学可以看看。
#include<iostream>
#include<cstring>
#include<math.h>
#include <stdio.h>
using namespace std;
int main()
{
int one,two,three;
int N,flag = 0;
while(~scanf("%d",&N))
{
flag =0 ;
three = N /3;
for(int i = 0; i <= three; i++)
{
two = (N - (i * 3))/2;
flag += (two+1);
}
if(N) cout << flag <<endl;
else cout << "0" << endl;
}
return 0;
}