原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1101
思路:完全背包
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int SIZE = 13;
const int value[13] = { 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000 };
const int MAXN = 1e5 + 10;
const int MOD = 1e9 + 7;
int dp[MAXN];
int main() {
int n;
dp[0] = 1;
scanf("%d", &n);
for (int i = 0; i < 13; i++) {
for (int v = value[i]; v <= n; v++) {
dp[v] = (1LL * dp[v] + dp[v - value[i]]) % MOD;
}
}
printf("%d\n", dp[n]);
return 0;
}