我快疯了,pts40,求调
查看原帖
我快疯了,pts40,求调
979656
Sgt_Dante楼主2023/7/18 10:18
#include<bits/stdc++.h>
using namespace std;
int dp[85][10005]={},n,zu[85][5],cost[85],vlu[85],money,zu_i_sum[85]={},zu_sum=0;
int main()
{
	cin>>money>>n;
	for(int i=1,l=1;l<=n;i++,l++){
		int z,v;
		cin>>cost[i]>>v>>z;
		vlu[i]=v*cost[i];
		if(z!=0){
			cost[i]+=cost[z+(i-l)];
			vlu[i]+=vlu[z+(i-l)];
			zu_i_sum[z]++;
		    zu[z][zu_i_sum[z]]=i;
		    if(zu_i_sum[z]==3){
		    	i++;
		    	zu_i_sum[z]++;
		    	cost[i]=cost[zu[z][1]];
			    vlu[i]=vlu[zu[z][1]];
		    	for(int j=2;j<=3;j++){
		    		cost[i]+=cost[zu[z][j]]-cost[zu[z][1]];
			        vlu[i]+=vlu[zu[z][j]]-vlu[zu[z][1]];
				}
			}
		}
		else{
			zu_sum=max(zu_sum,l);
			zu_i_sum[l]++;
		    zu[l][1]=i;
		}
	}
	for(int i=1;i<=zu_sum;i++){
		for(int j=1;j<=money;j++){
		    dp[i][j] = max(dp[i][j], dp[i-1][j]);
			for(int k=1;k<=zu_i_sum[i];k++){
				if(j-cost[zu[i][k]]>=0){
					dp[i][j]=max(dp[i][j],vlu[zu[i][k]]+dp[i-1][j-cost[zu[i][k]]]);
				}
			}
		}
	}
	cout<<dp[zu_sum][money];
    return 0;
}
2023/7/18 10:18
加载中...