[CF543A]/[CF544C]Writing Code
阿新 • • 發佈:2018-11-05
[CF543A]/[CF544C]Writing Code
題目大意:
有\(n\)種物品,每種物品分別要\(c_i\)的代價,每個物品有\(1\)的體積,每個物品可以選多個,代價不能超過\(b\),求正好填滿大小為\(m\)的揹包的方案數。
思路:
\(f[i][j]\)表示有\(i\)個物品,總代價為\(j\)的方案數。\(\mathcal O(n^3)\)DP即可。
原始碼:
#include<cstdio> #include<cctype> inline int getint() { register char ch; while(!isdigit(ch=getchar())); register int x=ch^'0'; while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0'); return x; } const int N=501,mod=1e9+7; int f[N][N]; int main() { const int n=getint(),m=getint(),b=getint(); f[0][0]=1; for(register int i=1;i<=n;i++) { const int x=getint(); for(register int j=1;j<=m;j++) { for(register int k=x;k<=b;k++) { (f[j][k]+=f[j-1][k-x])%=mod; } } } int ans=0; for(register int i=0;i<=b;i++) { (ans+=f[m][i])%=mod; } printf("%d\n",ans); return 0; }