[ACM_动态规划] 找零种类
问题描述:假设某国的硬币的面值有 1、5、10、50 元四种,输入一个金额 N (正整数,N<=1000),印出符合该金额的硬币组合有多少种。
问题分析: 1、5、10 元组合出 N 元的方法数 = 以 1、5 元组合出 N 元的方法数 + 以 1、5、10 元组合出 N - 10 元的方法数(其他类推)
#include<iostream> #include<algorithm> using namespace std; #define maxn 10000 int S[4]={1,5,10,50}; int ways[maxn+1]; int main(){ memset(ways,0,sizeof(ways)); ways[0]=1; for (int i=0; i<4; i++) for (int j=S[i]; j<=maxn; j++){ ways[j]+=ways[j-S[i]]; } for(int n;cin>>n&&n;) cout<<ways[n]<<'\n'; return 0; }