首页 > 代码库 > 【Luogu1359】租用游艇

【Luogu1359】租用游艇

点此进入原题

算法简单线性DP

题解

本题是最短路模版题,也是线性DP的模版题啊……(自己胡诌的……)

设f[i]为到第i个站的最小租金,则

f[1]=0, f[i]=min{f[j]+r[j][i]}(1≤j<i)

(r[i][j]表示从i到j的租金,输入给出)

就是这样,也很好理解哟~~

代码:

#include <cstdio>
const int N = 233;
#define INF 23333333
int r[N][N], f[N], n;
inline int mn(int x, int y) {
    return x < y ? x : y;
}
void init() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
        for(int j = i+1; j <= n; j++)
            scanf("%d", &r[i][j]); //按题目要求读入
}
void work() {
    f[1] = 0; //初始化
    for(int i = 2; i <= n; i++) {
        f[i] = INF;
        for(int j = 1; j < i; j++)
            f[i] = mn(f[i], f[j]+r[j][i]); //状态转移
    }
    printf("%d", f[n]);
}
int main() {
    init();
    work();
    return 0;
}

那么就以这个水题的题解,作为第一篇博客吧!

【Luogu1359】租用游艇