宝物筛选
将m个宝物一一拆开,就是普通的0-1背包问题,但是这样会超时,所以想到用二进制拆分m,最后再当做0-1背包问题
`#include
include
include
include<math.h>
using namespace std;
const int N=2e7+7;
int w,n;
int lst[N][2];
int dp[N]={0};
int main(){
int cnt=1,a,b,c;
scanf("%d %d",&n,&w);
for(int i=1;i<=n;i++){
scanf("%d %d %d",&a,&b,&c);
int t=1;
while(c>t){
lst[cnt][0]=at;
lst[cnt][1]=bt;
c-=t;t=2;cnt++;
}
if(c){
lst[cnt][0]=ac;
lst[cnt][1]=b*c;
cnt++;
}
}
for(int i=1;i<cnt;i++){
for(int j=w;j>=lst[i][1];j--){
dp[j]=max(dp[j],dp[j-lst[i][1]]+lst[i][0]);
}
}
printf("%d",dp[w]);
return 0;
}`