| 比赛 | 
    20251022赛前模拟1 | 
    评测结果 | 
    AAAAAAAAAAAAEEEEEEEE | 
    | 题目名称 | 
    电梯 | 
    最终得分 | 
    60 | 
    | 用户昵称 | 
    淮淮清子 | 
    运行时间 | 
    2.611 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    37.99 MiB  | 
    | 提交时间 | 
    2025-10-22 10:29:12 | 
显示代码纯文本
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 5005;
long long T[MAXN], A[MAXN];
long long maxx[MAXN][MAXN];
long long dp[MAXN];
int n;
int main(){
    freopen("a.in", "r", stdin);
    freopen("a.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    for(int i = 1;i <= n;i ++){
        cin >> T[i] >> A[i];
    }
    for(int i = 1;i <= n;i ++){
        maxx[i][i] = A[i];
        for(int j = i - 1;j >= 1;j --){
            maxx[j][i] = max(maxx[j + 1][i], A[j]);
        }
    }
    dp[0] = 0;
    for(int i = 1;i <= n;i ++) dp[i] = 1e18;
    for(int i = 1;i <= n;i ++){
        for(int j = 0;j < i;j ++){
            if(dp[j] == 1e18) continue;
            if(max(T[i], dp[j]) + 2 * maxx[j + 1][i] < dp[i]){
                dp[i] = max(T[i], dp[j]) + 2 * maxx[j + 1][i];
            }
        }
    }
	cout << dp[n] << '\n';
    return 0;
}