栈外题求调
查看原帖
栈外题求调
815807
zouyuhao20120225楼主2024/7/23 16:08

题面:


小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;
} 
2024/7/23 16:08
加载中...