题面:
小L的好朋友????特别喜欢购物,一天,她拉着???去购物。
她选中了?种商品,第?种商品有库存??,购买一件商品?,???会获得????的好感度??,第?件商品的质量为??。即使不考虑钱不够的问题。但由于???的力气不大,所以他只能提起质量不大于?千克的商品。???想知道他最多能获得多少好感度。
#include<iostream>
#include<queue>
#include<cmath>
#include<map>
using namespace std;
int n,m,wz=0,f[1305][20005];
struct node{
int a,b,w;
}q[1405];
struct nod2{
int w,v;
}qq[1405];
void CCF(int bh){
while(q[wz].a){
q[wz+1].a=q[wz].a-pow(2,int(log2(q[wz].a)));
q[wz+1].b=q[wz].b,q[wz+1].w=q[wz].w;
q[wz].b*=q[wz].a-q[wz+1].a;
q[wz].w*=q[wz].a-q[wz+1].a;
q[wz].a=1;
wz++;
}
}
int main(){
// freopen("help.in","r",stdin);
// freopen("help.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++){
wz++;
cin>>q[wz].a>>q[wz].b>>q[wz].w;
CCF(wz);
}
int xb=0;
for(int i=1;i<=wz;i++){
if(q[i].a>0){
xb++;
qq[xb].w=q[i].w,qq[xb].v=q[i].b;
}
}
for(int i=1;i<=xb;i++){
for(int j=m;j>=qq[i].w;j--){
f[i][j]=max(f[i][j],f[i-1][j-qq[i].w]+qq[i].v);
}
}
cout<<f[xb][m];
return 0;
}