萌新#4TLE求救
查看原帖
萌新#4TLE求救
891199
Imyigeren楼主2023/6/15 18:55
#include<bits/stdc++.h>
using namespace std;
struct node{
	int a,b,c;
}ar[10000];
long long n,m,record[10000],dp[10000];
int dongtai(int i,int v,int chosen){
	
	if(chosen&&ar[i].c!=ar[i+1].c){
		chosen=0;
	}
	if(chosen){
		return dongtai(record[ar[i].c-1],v,chosen);
	}
	if(i<0){
		return 0;
	}
	if(dp[i]){
		return dp[i];
	}
	if(ar[i].a<=v){
		return dp[i]=max(dongtai(i-1,v,0),dongtai(i-1,v-ar[i].a,1)+ar[i].b);
	}
	return dp[i]=dongtai(i-1,v,0);
	
}
int main(){
	
	cin>>m>>n;
	for(int i=0;i<n;i++){
		cin>>ar[i].a>>ar[i].b>>ar[i].c;
		if(ar[i].c!=ar[i-1].c){
			record[ar[i].c-1]=i-1;
			for(int j=record[ar[i].c-2]+1;j<i-1;j++){
				if(ar[j].a==ar[j+1].a){
					ar[j].b=max(ar[j].b,ar[j+1].b);
					ar[j+1].a=0;
					ar[j+1].b=0;
					ar[j+1].c=0;
				}
			}
		}
	}	
	cout<<dongtai(n,m,0);
	
}

第四题TLE求救

2023/6/15 18:55
加载中...