1 #include2 using namespace std; 3 int Max(int a,int b,int c){ 4 if(a =c;k--){ //递推顺序不能颠倒,因为每种工作只能被完成一次23 //如 01背包中的滚动数组 24 if(s==1) f[i][k]=max(f[i][k],f[i-1][k-c]+g); //01背包模型最多能选取一件 25 else f[i][k]=Max(f[i][k],f[i-1][k-c]+g,f[i][k-c]+g); //可以选取多件,26 //所以在 max中多加了了一个 f[i][k-c]+g 以致可以选取多个 27 }28 }29 }30 printf("%d\n",max(f[n][T],-1)); //假如不存在解,f[n][T]则为负无穷 31 }32 return 0;33 }
一种混合+组合背包问题!很经典