20分求调
查看原帖
20分求调
215817
gyc071116楼主2024/7/30 11:09

除了#1#10全WA,样例能过

#include<bits/stdc++.h>
using namespace std;
int master[65][2][2],w[100],cost[100],f[40000];
int main(){
	int n,m,tot=0;
	scanf("%d %d",&n,&m);
	for(int i=1;i<=m;i++){
		master[i][0][0]=-1;
		master[i][0][1]=-1;
		master[i][1][0]=-1;
		master[i][1][1]=-1;
	}
	for(int i=1;i<=m;i++){
		int val,imp,rlt;
		scanf("%d %d %d",&val,&imp,&rlt);
		if(!rlt){
			w[++tot]=imp*val;
			cost[tot]=val;
			master[i][0][0]=val;
			master[i][0][1]=imp*val;
		}
		else{
			if(master[rlt][1][1]==-1){
				w[++tot]=imp*val+master[rlt][0][1];
				cost[tot]=val+master[rlt][0][0];
				master[rlt][1][0]=val+master[rlt][0][0];
				master[rlt][1][1]=imp*val+master[rlt][0][1];
			}
			else{
				w[++tot]=imp*val+master[rlt][0][1];
				cost[tot]=val+master[rlt][0][0];
				w[++tot]=imp*val+master[rlt][1][1];
				cost[tot]=val+master[rlt][1][0];
			}
		}
	}
	for(int i=1;i<=tot;i++){
		for(int j=n;j>=cost[i];j--){
			f[j]=max(f[j],f[j-cost[i]]+w[i]);
		}
	}
	printf("%d",f[n]);
	return 0;
}
2024/7/30 11:09
加载中...