POJ 2355 Railway tickets 线性DP

本文介绍了一种使用线性动态规划方法来解决基于不同区间票价的最小费用路径问题。给定一系列车站间的距离和三个区间的票价,通过动态规划算法求得任意两站间旅行的最低总票价。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目地址~


题目大意: X为距离 , 当0<X<=L1, 票价为C1。 L1<X<=L2 ,票价为C2。L2<X<=L3,票价为C3。给每段车站时间的距离,求某两个车站之间的总票价的最小值。

思路: 线性dp,  直接在for循环里判断就好了, dp[i] = min(dp[j]+cost, 0<=j<i)


AC CODE:

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

int dp[10010];

int main(void) {
    int l1, l2, l3;
    while (cin >> l1 >> l2 >> l3) {
        int c1, c2, c3;
        cin >> c1 >> c2 >> c3;
        
        int n, st, ed;
        cin >> n >> st >> ed;
        if (st > ed) swap(st, ed);
        int arr[10010] = {0};
        for (int i = 2; i <= n; i++) {
            cin >> arr[i];
        }
        
        memset(dp, 0x3f3f3f3f, sizeof(dp));
        dp[st] = 0;
        //dp[i] = min(dp[j]+cost, 0<=j<i)
        for (int i = st; i < ed; i++) {
            for (int j = i+1; j <= n; j++) {
                if (arr[j] - arr[i] > l3) continue;
                if (arr[j] - arr[i] > l2) dp[j] = min(dp[j], dp[i] + c3);
                else if (arr[j]-arr[i] > l1) dp[j] = min(dp[j], dp[i] + c2);
                else dp[j] = min(dp[i] + c1, dp[j]); 
               // cout << "--" << dp[j] << endl;
            }
        }
        cout << dp[ed] << endl;
        
    }  
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值