社区讨论
不知道为啥只有91分。
P6771[USACO05MAR] Space Elevator 太空电梯参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m48cjv3i
- 此快照首次捕获于
- 2024/12/03 18:59 去年
- 此快照最后确认于
- 2025/11/04 13:24 4 个月前
CPP
#include <vector>
#include <iostream>
#include <queue>
#include <algorithm>
#include <set>
#include <map>
#include <cmath>
#include <climits>
#include <stdio.h>
#include <stack>
using namespace std;
struct lift {
int h;
int a;
};
bool cmp(const lift& lift1, const lift& lift2) {
return lift1.a < lift2.a;
}
int main() {
int n;
cin >> n;
vector<int> h(n);
vector<int> a(n);
vector<int> c(n);
for (int i = 0; i < n; ++i) {
cin >> h[i] >> a[i] >> c[i];
}
vector<lift> lifts;
int hsum = 0;
for (int i = 0; i < n; ++i) {
for (int j = 1; j <= c[i]; j <<= 1) {
lifts.push_back({h[i] * j, a[i]});
c[i] -= j;
hsum += h[i] * j;
}
if (c[i] != 0) {
lifts.push_back({h[i] * c[i], a[i]});
hsum += h[i] * c[i];
}
}
sort(lifts.begin(), lifts.end(), cmp);
vector<bool> dp(hsum + 1);
dp[0] = true;
for (int i = 0; i < lifts.size(); ++i) {
for (int j = lifts[i].a; j >= lifts[i].h; --j) {
dp[j] = dp[j] || dp[j - lifts[i].h];
}
}
int ans = 0;
for (int j = hsum; j >= 0; j--) {
if (dp[j]) {
ans = j;
break;
}
}
cout << ans;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...