subtask#1第二个点WA,求调QwQ
查看原帖
subtask#1第二个点WA,求调QwQ
1831602
blw20132楼主2025/8/29 12:43

大佬们帮我瞅瞅,哪里错了

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=105;
ll n,m,s[32005],v[N],p[N],q[N],num[N],f[N][5][5],f2[N];
void init(){
	for(ll i=1;i<=n;++i){
		if(num[i]==1)f2[i]=1;
		if(num[i]==2)f2[i]=2;
		if(num[i]>=2)f[i][2][1]+=f[i][1][1];
		f[i][2][2]+=f[i][1][2];
		if(num[i]==3){
			f2[i]=4;
			f[i][3][1]+=f[i][1][1];
			f[i][3][2]+=f[i][1][2];
			f[i][4][1]=f[i][2][1]+f[i][3][1]-f[i][1][1];
			f[i][4][2]=f[i][2][2]+f[i][3][2]-f[i][1][2]; 
		} 
	}
}
int main(){
	scanf("%lld%lld",&m,&n);
	for(ll i=1;i<=n;++i){
		scanf("%lld%lld%lld",&v[i],&p[i],&q[i]);
		if(!q[i]){
			++num[i];
			f[i][1][1]=v[i]*p[i];
			f[i][1][2]=v[i];
		}else{
			++num[q[i]];
			f[q[i]][num[q[i]]][1]=v[i]*p[i];
			f[q[i]][num[q[i]]][2]=v[i];
		}
	}
	init();
	for(ll i=1;i<=n;++i)
	    if(num[i]>0)
	        for(ll j=m;j>=0;--j)
	            for(ll k=1;k<=f2[i];++k)
	            	if(f[i][k][2]<=j)s[j]=max(s[j],s[j-f[i][k][2]]+f[i][k][1]);
	printf("%lld",s[m]);
	return 0;
}

对了必关

2025/8/29 12:43
加载中...