Submission #1240000

#TimeUsernameProblemLanguageResultExecution timeMemory
1240000yenthuyaBuilding Bridges (CEOI17_building)C++20
0 / 100
3095 ms4076 KiB
#include <iostream> #include <vector> #include <map> #include <climits> using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<ll> h(n), w(n), prefix(n + 1, 0), dp(n, LLONG_MAX); for (int i = 0; i < n; ++i) cin >> h[i]; for (int i = 0; i < n; ++i) { cin >> w[i]; prefix[i + 1] = prefix[i] + w[i]; } dp[0] = 0; // TreeMap for height -> dp value (optimized step) map<ll, ll> min_dp_for_height; min_dp_for_height[h[0]] = 0; for (int i = 1; i < n; ++i) { for (auto& [hj, dpj] : min_dp_for_height) { // Tính chi phí khi chọn trụ j để nối đến i ll cost = dpj + (h[i] - hj) * (h[i] - hj) + prefix[i] - prefix[&hj - &h[0] + 1]; dp[i] = min(dp[i], cost); } // Cập nhật bản đồ chi phí tối ưu với h[i] if (!min_dp_for_height.count(h[i])) { min_dp_for_height[h[i]] = dp[i]; } else { min_dp_for_height[h[i]] = min(min_dp_for_height[h[i]], dp[i]); } } cout << dp[n - 1] << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...