社区讨论

不知道为啥只有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 条回复,欢迎继续交流。

正在加载回复...