有五种硬币:1,5,10,25,50,现给一个n,求用这些硬币组成价值n的种类数,例如n=11;
- 11个1
- 1个10,1个1
- 1个5,6个1
- 2个5,1个1
特别注意:使用硬币数不能超过100,开数组时注意数组范围。
#include<bits/stdc++.h>
using namespace std;
const int coin[]={1,5,10,25,50};
int dp[255][105]; //dp[j][k]:用k个硬币组成j元的个数
int main(){
int n;
while(cin>>n){
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(int i=0;i<5;i++){
for(int k=1;k<=100;k++){ //k个硬币
for(int j=coin[i];j<=n;j++) {
dp[j][k]+=dp[j-coin[i]][k-1];
}
}
}
int res=0;
for(int i=0;i<=100;i++)
res+=dp[n][i];
cout<<res<<endl;
}
return 0;
}