27分求助
查看原帖
27分求助
345074
梦璃花花花花楼主2022/12/2 12:35
#include<bits/stdc++.h>
using namespace std;
int dp[105][105];//dp[i][j]表示在处理第i个垃圾后,达到j高度所能有的最大血量.
struct trash{
	int time;
	int life;
	int height;
}trash[105]; 
int main(){
	int d,g;
	cin>>d>>g;
	for(int i=1;i<=g;i++){
		cin>>trash[i].time>>trash[i].life>>trash[i].height;;
	}
	for(int i=0;i<g;i++){
		for(int j=1;j<=g-i-1;j++){ 
			if(trash[j].time>trash[j+1].time){
			swap(trash[j].height,trash[j+1].height);
			swap(trash[j].life,trash[j+1].life);
			swap(trash[j].time,trash[j+1].time);
		}
	}
	}
	memset(dp,-1,sizeof(dp)); 
	dp[0][0]=10;
	int maxt=0;
	for(int i=0;i<g;i++){
		for(int j=0;j<=d;j++){
			if(dp[i][j]>=trash[i+1].time-trash[i].time){
			/*不用来吃*/dp[i+1][j+trash[i].height]=max(dp[i][j]-(trash[i+1].time-trash[i].time),dp[i+1][j+trash[i].height]);
			/*用来吃*/dp[i+1][j]=max(dp[i][j]+trash[i+1].life-(trash[i+1].time-trash[i].time),dp[i+1][j]);
		}
		if(dp[i+1][j+trash[i+1].height]>=0&&j+trash[i+1].height>=d){
		        	cout<<trash[i+1].time<<endl;
				return 0;	
		}		
	}
	if(dp[i][0]!=-1)
	    maxt=max(maxt,dp[i][0]+trash[i].time);
	}
	cout<<maxt<<endl;
	return 0;
}

2022/12/2 12:35
加载中...