1 条题解

  • 0

    题目分析

    本题属于动态规划问题,需要通过计算两站之间的最短路径来求解最低费用。关键在于如何利用票价分段规则,通过动态规划找到最优解。

    解题思路

    1. 输入处理:读取票价分段标准、车站数量、起始站和终点站,以及各站到起点的距离。
    2. 动态规划:使用动态规划数组dp[i]dp[i]表示到达第ii站的最低费用,初始时dp[start]=0dp[start] = 0,其余为\infty
    3. 状态转移:对于每个车站ii,向前查找满足距离不超过L3L3的所有车站jj,根据距离计算票价,并更新dp[i]dp[i]的最小值。
    4. 结果输出dp[end]dp[end]即为所求的最低费用。

    实现步骤

    1. 读取输入:解析票价标准、车站信息。
    2. 初始化动态规划数组:设置起点费用为00,其他为最大值。
    3. 动态规划计算:遍历每个车站,更新可能的最低费用。
    4. 输出结果:打印终点站的最低费用。

    C++实现

    #include <iostream>
    #include <vector>
    #include <climits>
    using namespace std;
    
    typedef long long LL;
    
    int main() {
        LL L1, L2, L3, C1, C2, C3;
        cin >> L1 >> L2 >> L3 >> C1 >> C2 >> C3;
        
        int N;
        cin >> N;
        
        int start, end;
        cin >> start >> end;
        
        if (start > end) {
            swap(start, end);
        }
        
        vector<LL> distances(N + 1);
        distances[1] = 0;  // 第1站到第1站的距离为0
        
        for (int i = 2; i <= N; ++i) {
            cin >> distances[i];
        }
        
        vector<LL> dp(N + 1, LLONG_MAX);
        dp[start] = 0;
        
        for (int i = start; i < end; ++i) {
            if (dp[i] == LLONG_MAX) continue;
            
            for (int j = i + 1; j <= end; ++j) {
                LL dist = distances[j] - distances[i];
                
                if (dist <= 0) continue;
                
                LL cost;
                if (dist > 0 && dist <= L1) {
                    cost = C1;
                } else if (dist <= L2) {
                    cost = C2;
                } else if (dist <= L3) {
                    cost = C3;
                } else {
                    // 距离超过L3,无法直达,跳过
                    continue;
                }
                
                if (dp[j] > dp[i] + cost) {
                    dp[j] = dp[i] + cost;
                }
            }
        }
        
        cout << dp[end] << endl;
        
        return 0;
    }    
    
    • 1

    信息

    ID
    1356
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    10
    已通过
    1
    上传者