描述
题解
针对每种零钱,可以选择换或者选择不换。
dp[i]:表示i分钱的换法
for(int j=1;j<13;j++){
dp[i]=dp[i]+dp[i-mon[j]// dp[i]:不换该种零钱;dp[i-mon[j]]:换该种零钱
}
代码
#include <iostream>
#include<stdio.h>
#include<string.h>
#define maxn 100005
using namespace std;
const int MOD = 1000000007;
int dp[maxn];
int n;
int mon[13]={1,2,5,10,20,50,100,200,500,1000,2000,5000,10000};
int main()
{
while(scanf("%d",&n)==1){
for(int i=0;i<=n;i++){
dp[i]=1;
}
for(int i=1;i<13;i++){
for(int j=mon[i];j<=n;j++){
dp[j]=(dp[j]+dp[j-mon[i]])%MOD;
}
}
printf("%d\n",dp[n]);
}
return 0;
}