首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Codeforces 534B Covered Path:速度變化約束下的最大路徑長度

     編輯:關於C++

題目簡介

已知起點速度 s、終點速度 e、總時間 t、每秒速度變化上限 d。求在 t 秒內行駛的最大距離。速度序列需滿足 |v[i] - v[i-1]| ≤ d,v[1]=s, v[t]=e。

解題思路

貪心構造最優速度序列:

  1. 初始化速度數組 a[1]=s, a[t]=e。
  2. 從左向右填充:a[i] = min(a[i-1] + d, e + (t-i)*d),確保既不超過變化上限,又能最終到達 e。
  3. 若 s > e,則從右向左填充:a[i] = min(a[i+1] + d, s + (i-1)*d)。
  4. 求和所有 a[i] 即為最大距離。

代碼實現

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    int s, e, t, d;
    while (cin >> s >> e) {
        cin >> t >> d;
        int a[205] = {0};
        a[1] = s; a[t] = e;
        if (s <= e) {
            for (int i = 2; i < t; i++)
                a[i] = min(a[i-1] + d, e + (t - i) * d);
        } else {
            for (int i = t-1; i >= 2; i--)
                a[i] = min(a[i+1] + d, s + (i - 1) * d);
        }
        long long ans = 0;
        for (int i = 1; i <= t; i++) ans += a[i];
        cout << ans << endl;
    }
    return 0;
}

複雜度分析

時間 O(t),空間 O(t),t ≤ 200 極小。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved