50分救急!!!!!!!!
查看原帖
50分救急!!!!!!!!
705729
count_year楼主2024/6/22 10:52

哪里错了??

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define db double
#define itn int
#define fro for
#define scnaf scanf
#define snacf scanf
#define prinf printf
int n,m;
struct asd{
	int v;
	int w;
	int q;
	int s;
	int k[11];
	int id;
}a[71];
int dp[32001];
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
//	freopen(".in","r",stdin);
//	feropen(".out","w",stdout);
	scanf("%d%d",&m,&n);
	for(int i=1;i<=n;i++){
		scanf("%d%d%d",&a[i].v,&a[i].w,&a[i].q);
		a[i].id=i;
		a[a[i].q].s++;
		a[a[i].q].k[a[a[i].q].s]=a[i].id;
		a[i].v*=a[i].w;
	}
	for(int i=1;i<=n;i++){
		if(a[i].q!=0){
			continue;
		} 
		for(int j=m;j>=a[i].v;j--){
			if(j>=a[i].v){
				dp[j]=max(dp[j],dp[j-a[i].v]+a[i].v);
			}
			if(j>=a[i].v+a[a[i].k[1]].v&&a[i].s>=1){
				dp[j]=max(dp[j],dp[j-a[i].v-a[a[i].k[1]].v]+a[i].v+a[a[i].k[1]].v);
			}
			if(j>=a[i].v+a[a[i].k[2]].v&&a[i].s>=1){
				dp[j]=max(dp[j],dp[j-a[i].v-a[a[i].k[2]].v]+a[i].v+a[a[i].k[2]].v);
			}
			if(j>=a[i].v+a[a[i].k[1]].v+a[a[i].k[2]].v&&a[i].s==2){
				dp[j]=max(dp[j],dp[j-a[i].v-a[a[i].k[1]].v-a[a[i].k[2]].v]+a[i].v+a[a[i].k[1]].v+a[a[i].k[2]].v);
			}
		}
	}
	printf("%d",dp[m]);
    return 0;
}

/*

*/







2024/6/22 10:52
加载中...