这个题和之前的硬币的题是一样的,只不过面值不一样而已,但是这个题写一个dfs会超时。
#include<iostream> #include<cstring> #include<cstdio> #include<cstdlib> #define LL long long using namespace std; int coin[]= {1,5,10,25,50}; LL d[30009]; int main() { //freopen("in.txt","r",stdin); int money; memset(d,0,sizeof(d)); d[0]=1; for(int i=4; i>=0; i--) { for(int j=1; j<=30000; j++) { if(j>=coin[i]) d[j]+=d[j-coin[i]]; } } while(scanf("%d",&money)!=EOF) { if(d[money]>1) cout<<"There are "<<d[money]<<" ways to produce "<<money<<" cents change.\n"; else cout<<"There is only 1 way to produce "<<money<<" cents change.\n"; } return 0; }