SSL_2293 暗黑遊戲
阿新 • • 發佈:2019-01-03
題意:
混合揹包。思路:
判斷數量,如果是0就按照完全揹包的去做。程式碼:
#include<cstdio> 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]); }