제출 #1309498

#제출 시각아이디문제언어결과실행 시간메모리
1309498haught_veathFuel Station (NOI20_fuelstation)C++20
0 / 100
3094 ms15296 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e6;
const int inf = 1e18;
int dp[maxn];
struct information{
  int x,f,r;
  bool operator <(const information a)const {
    return x < a.x;
  }
};
int n,h;
vector<information> a;
bool check(int x){
  memset(dp,-1,sizeof(dp));
  dp[0]  = x;
  a[0] = {0,0,0};
  for(int i = 1;i < a.size();i++)
  {
    dp[i] = -1;
    for(int j = 0;j < i ;j++)
    {
      int cost = dp[j] - a[i].x + a[j].x;
      if(cost >= 0)
        dp[i] = max(dp[i],min(cost,a[i].r)+a[i].f);
    }
    if(a[i].x >= h && dp[i] != -1)return true;
  }
  return false;
}
void solve(){
  int l = 0, r = inf;
  int ans = 0;
  while(l <= r){
    int mid = (l+r)/2;
    if(check(mid)) {
      r = mid-1;
      ans = mid;
    }
    else l = mid + 1;
  }
  cout << ans;
}
signed main(){
  ios_base::sync_with_stdio(false);
  cout.tie(nullptr);
  cin.tie(nullptr);
  cin >> n >> h;
  a.resize(n+1);
  for(int i = 1;i<=n;i++)
    cin >> a[i].x >> a[i].f >> a[i].r;
  
  a.push_back({h,0,inf});
  sort(a.begin()+1,a.end());
  solve();
  
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...