求助 !!
查看原帖
求助 !!
559503
j_steady楼主2022/8/6 13:27
#include <bits/stdc++.h>
#define vi val[i]
#define wi w[i]
#define vim1 val[maj_2[i][1]]
#define wim1 w[maj_2[i][1]]
#define vim2 val[maj_2[i][2]]
#define wim2 w[maj_2[i][2]]
using namespace std;
int n,m,val[65],ans = 0,major[65],w[65],maj_2[65][65],cnt[65],f[320005];
int main (){
	scanf ("%d%d",&m,&n);
	for(int i=1;i<=n;i++){
		scanf("%d%d%d",&val[i],&w[i],&major[i]);
		maj_2[major[i]][++cnt[major[i]]] = i;
	}
	/*puts("qwq");
	for(int i = 1;i<=n;i++){
		printf ("%d qwqwwqwqw\n",major[i]);
	}
	for(int i=1;i<=n;i++){
		for(int j =1;j<=2;j++){
			printf ("%d ",maj_2[i][j]);
		}
		puts("");
	}*/
	for(int i=1;i<=n;i++){
		for(int j = m;j>=0;j --){
			if(!major[i]){ 
				if(j >= vi) f[j] = max(f[j],f[j-vi]+vi * wi);
				if(maj_2[i][1] && j>=vi+vim1) f[j] = max(f[j],f[j-vim1-vi]+vim1*wim1+vi*wi); 
				if(maj_2[i][2] && j>=vi+vim2)  f[j] = max(f[j],f[j-vim2-vi]+vim2*wim2+vi*wi);
				if(maj_2[i][1] && maj_2[i][2] && j>=vi+vim1+vim2) f[j] = max(f[j],f[j-vim1-vim2-vi] + vi*wi+vim2*wim2+vim1*wim1);	
			}
		}
	} 
	for(int i=1;i<=m;i++){
		ans = max(ans,f[i]);
	}
	printf ("%d",ans);
	return 0;
} 

为什么 maj_2 数组 第二位要开到65 开小了就炸了 但cnt数组不应该只能到2嘛 qwq

谢谢 orz

2022/8/6 13:27
加载中...