确定 状态为
dp[i][j]
d
p
[
i
]
[
j
]
表示前
i
i
个物品选或者不选 结果为j的方案数,
和当前状态有关,顺序滚动数组,其实就是个完全背包QWQ
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5+10;
const int mod = 1e9+7;
int dp[MAXN];
int w[] = {1,2,5,10,20,50,100,200,500,1000,2000,5000,10000};
int n, sum;
int main(int argc, char const *argv[])
{
cin >> n;
dp[0] = 1;
for(int i = 0; i < 13; i++) {
for(int j = w[i]; j <= n; j++)
dp[j] = (dp[j] + dp[j-w[i]]) % mod;
}
cout << dp[n] << endl;
return 0;
}