KY139 毕业bg

背包问题,不过时间要从后往前考虑
ti

#include

using namespace std;

struct bg{
	int h, t1, t2;
}m[35];

bool cmp(bg a, bg b){
	return a.t2 < b.t2;
}

int k;
int nb;
int dp[1010];

int main()
{
	while(cin>>nb){
		if(nb == -1) break;
		memset(dp, 0, sizeof(dp));
		memset(m, 0, sizeof m);
		
		int maxt = -1;
		for(int i = 0; i < nb; i ++ ){
			cin>>m[i].h>>m[i].t1>>m[i].t2;
			maxt = max(maxt, m[i].t2);
		}
		//cout<
		sort(m, m + nb, cmp);
		int res = -1;
		for(int i = 0; i < nb; i ++ ){  //活动 
			for(int j = m[i].t2; j >= 0; j -- ){  //时间 
				if(j - m[i].t1 >= 0){  //这个活动能去 
					dp[j] = max(dp[j], dp[j - m[i].t1] + m[i].h); 
					res = max(res, dp[j]);              
				}
			}
		}
		cout<<res<<endl;
	}
	return 0;
}

你可能感兴趣的:(图论)