经典的dp题目,我们设状态dp(i)为总面值为i时的方式数,那么状态转移方程为dp(i)=dp(i)+dp(i-c[j]),其中c为数组,表示的各个单位面值。
#include <iostream>
#include <cstring>
using namespace std;
int dp[8000];
int main()
{
int n,c[]={1,5,10,25,50};
while(cin>>n){
memset(dp,0,sizeof(dp));
dp[0]=1;
for(int j=0;j<5;j++)
for(int i=0;i+c[j]<=n;i++) dp[i+c[j]]+=dp[i];
cout<<dp[n]<<endl;
}
return 0;
}