SSL_2293 暗黑游戏

题意: 混合背包。 思路: 判断数量,如果是0就按照完全背包的去做。 代码:

#include int p,r,n,w1[1001],w[1001],c[1001],s[1001],f[1001][1001]; int max(int x,int y) { return x>y?x:y; } int main() { scanf("%d%d%d",&n,&p,&r); for (int i=1; i<=n; i++) scanf("%d%d%d%d",&w1[i],&w[i],&s[i],&c[i]); for (int i=1; i<=n; i++) if (!s[i])//判断数量 { for (int j=w1[i]; j<=p; j++) for (int k=w[i]; k<=r; k++) f[j][k]=max(f[j][k],f[j-w1[i]][k-w[i]]+c[i]); }//完全背包 else { for (int j=1; j<=s[i]; j++) for (int k=p; k>=w1[i]; k--) for (int l=r; l>=w[i]; l--) f[k][l]=max(f[k][l],f[k-w1[i]][l-w[i]]+c[i]); }//多重背包 printf("%d",f[p][r]); }



    推荐阅读