悬关,求调
查看原帖
悬关,求调
819278
48WangYanJi楼主2023/10/27 17:40

4~9WA,代码如下:

#include<bits/stdc++.h>
using namespace std;
struct goo{
	int v,p,fo=0;//价格,价值,附件数
};
int main()
{
	int n,m;
	cin>>n>>m;
	int a[n+1];//left
	goo b[m][3];
	for(int i=0;i<=n;i++){
		a[i]=0;
	}
	for(int i=0;i<m;i++){
		int V,W,Q;
		cin>>V>>W>>Q;
		if(Q!=0){
			b[Q-1][b[Q-1][0].fo+1].v=V;
			b[Q-1][b[Q-1][0].fo+1].p=V*W;
			b[Q-1][0].fo++;
			b[i][0].v=-1;
		}else{
			b[i][0].v=V;
			b[i][0].p=V*W;
		}
	}//先按顺序存,空出位置好判定
	for(int i=0;i<m;i++){
		if(b[i][0].v==-1){
			continue;
		}
		for(int k=1;k<=b[i][0].fo;k++){
			b[i][k].v+=b[i][0].v;
			b[i][k].p+=b[i][0].p;//如果买附件,自动买主件(后计算连锁防HACK)
		}
	}
	for(int i=0;i<m;i++){
		if(b[i][0].v==-1){
			continue;
		}
		for(int j=n;j>=0;j--){
			for(int k=0;k<=b[i][0].fo;k++){
				if(j>=b[i][k].v) a[j]=max(a[j],a[j-b[i][k].v]+b[i][k].p);
			}//对于每一套物品,决策不同购买方式
		}
	}
	cout<<a[n];
	return 0;
}
2023/10/27 17:40
加载中...