贪心+背包

avatar
作者
筋斗云
阅读量:0

在这里插入图片描述

这道题比较坑的就是我们的对于相同截止时间的需要排个序,因为我们这个工作是有时间前后顺序的,我们如果不排序的话我们一些截止时间晚的工作就无法得到最优报酬

#include<bits/stdc++.h> using namespace std;  #define int long long int t; int n; const int N = 5005; struct node{ 	int t,end,pr; 	int start; 	bool operator<(node b){ 		if(end<b.end) return 1; 		return 0; 	} }e[N]; int ans = 0;  int dp[N];  signed main(){ 	cin >> t; 	while(t--){ 		cin >> n; 		int tmax = 0; 		for(int i=1;i<=n;i++){ 			cin >> e[i].t >> e[i].end >> e[i].pr; 			e[i].start = e[i].end - e[i].t; 			tmax = max(tmax,e[i].end); 		} 		sort(e+1,e+1+n); 		for(int i=0;i<=5004;i++) dp[i] = 0; 		for(int i=1;i<=n;i++){ 			for(int j=e[i].end;j>=e[i].t;j--){ 				dp[j] = max(dp[j],dp[j-e[i].t]+e[i].pr); 			} 		} 		int ans = 0; 		for(int i=1;i<=tmax;i++) ans = max(ans,dp[i]); 		cout << ans << endl; 	} 	return 0; } 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!