51Nod 1101 换零钱

描述

在这里插入图片描述

题解

针对每种零钱,可以选择换或者选择不换。
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;
}

猜你喜欢

转载自blog.csdn.net/qq_27690765/article/details/88774055
今日推荐