题目描述:
将任意给定的整百元钞票,兑换成10元、20元、50元小钞票形式。输出兑换方案总数。
输入输出:
输入需要兑换的钞票总数n。
输出方案总数。
样例:
100
10
数据范围:
100<=n<=1000000
提示:
方案序号10元张数20元张数50元张数
100220503121424053116430750186209810101000
分析:
利用穷举法会超时,所以改进算法。
首先算出全部兑换成50元最多有几张,然后再用循环,50元张数的每一种可能下,20元最多有几张,比如总数是n,50元的张数是i,那么20元,最多有j = (n - 50*i)/20 张。那么50元,在i张的情况下,20元就可以有0-j张,所以也就是j + 1种可能,因为20元为0张的时候,除了50,就是10元的。
#include <iostream>
using namespace std;
int main()
{
int n,i,s;
cin>>n;