题目:买书
思路:
dp。
f[i]表示花i块钱的方案数。
类似于完全背包。
转移方程:f[i]+=f[i-a[j]*k],边界f[0]=0。
当n<10是特判。
代码
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000
int n;
int a[10]= {0,10,20,50,100};
int f[maxn+5]= {0};
int main() {
scanf("%d",&n);
if(n<10) {
printf("0");
return 0;
}
f[0]=1;
for(int j=1; j<=4; j++) {
for(int i=n; i>=1; i--) {
for(int k=1;i-a[j]*k>=0;k++)
f[i]+=f[i-a[j]*k];
}
}
printf("%d",f[n]);
return 0;
}