91ptsWAon13求调
查看原帖
91ptsWAon13求调
1086813
mian_57_yang楼主2024/9/22 18:13
#include<bits/stdc++.h>
using namespace std;
const int M = 5010;
const int N = 110;
struct rubbish {
	int t,f,h;
} r[N];
int n,m;
int dp[N][M]; 
bool cmp(rubbish r1,rubbish r2) {
	return r1.t < r2.t;
}
int main() {
	scanf("%d%d",&n,&m);
	int alive = 10,maxF = 10;
	for(int i=1;i<=m;i++) {
		scanf("%d%d%d",&r[i].t,&r[i].f,&r[i].h);
		if(alive >= r[i].t) {
			alive += r[i].f;
		} maxF += r[i].f;
	}
	sort(r+1,r+m+1,cmp);
	memset(dp,-1,sizeof(dp));
	dp[0][10] = 0;
	for(int i=1;i<=m;i++) {
		for(int j=r[i].t;j<=maxF;j++) {
			if(dp[i-1][j] != -1) {
				dp[i][j] = max(dp[i-1][j] + r[i].h,dp[i][j]);
			}
			if(j-r[i].f >= r[i].t && dp[i-1][j-r[i].f] != -1) {
				dp[i][j] = max(dp[i-1][j-r[i].f],dp[i][j]);
			}
			if(dp[i][j] >= n) {
				printf("%d\n",r[i].t);
				return 0;
			}
		}
	} printf("%d\n",alive);
	return 0;
}

主要是状态跟题解设的不一样 dp[i][j]表示第i件垃圾,此时可以存活j小时 最多可以达到的高度

这里主要想问一下我这个思路可不可以实现? 如果不能的话各位麻烦各位dalao帮忙讲下原因

2024/9/22 18:13
加载中...