题解 | 毕业bg
毕业bg
https://www.nowcoder.com/practice/a3a99a0658a44cb1a37ddf5c164e21a6
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct student;
int n;
vector<student>bg;
struct student {
int h;
int l;
int t;
student(int h, int l, int t) :h(h), l(l), t(t) {
}
//按结束时间从小到大排序
bool operator<(const student& s)const {
return t < s.t;
}
};
int res = 0;
void dfs(int i, int sum, int now) {
//分别代表当前是第几个party,快乐度总和是多少,如今的时间
if (i == n) {
//说明此时已经枚举完所有party了
res = max(res, sum);
return;
}
//不选这场party参见
dfs(i + 1, sum, now);
//这里进行了剪枝
if (now + bg[i].l <= bg[i].t) {
//只有参加完节目之前,创办人不离开才会选这个party参加
dfs(i + 1, sum + bg[i].h, now + bg[i].l);
}
}
int main()
{
int h, l, t;
int a, b;
int i;
while (scanf("%d", &n) != EOF && n >= 0)
{
res = 0;
bg.clear();
for (int i = 0; i < n; i++) {
cin >> h >> l >> t;
bg.push_back(student(h, l, t));
}
sort(bg.begin(), bg.end());
//开始dfs
dfs(0, 0, 0);
cout << res<<endl;
}
}
// 64 位输出请用 printf("%lld")
