zoukankan      html  css  js  c++  java
  • [Luogu1359] 租用游艇 题解

    正如很多$dalao$所说,$DP$确实是做这道题的一个好办法蛤

    但是因为我今天正好在自学$Floyd$,所以这题我就用$Floyd$写了

    反正这题$N$的范围很小,$O(N^3)$可以过

    $Floyd$算法的主要思想就是:找到从$i$点通过一个或多个中转点(也可能没有)到达$j$点的最佳路线。

    就是一道裸的$Floyd$

    $code$

    #define il inline
    #define rg register
    #define INF 0x3f3f3f3f //注意INF不能大于INT_MAX/2,不然就会爆int
    #define maxN 200 + 1 
    //以上是各种宏定义
    #include <bits/stdc++.h>
    
    int dis[maxN][maxN]; //dis[i][j]保存从i到j的最短租金
    
    int main()
    {
        rg int n; //定义n
        scanf("%d", &n);
        for(rg int i = 1; i < n; ++ i)
            for(rg int j = i + 1; j <= n; ++ j)
                scanf("%d", &dis[i][j]);
        for(rg int i = 1; i <= n; ++ i)
            for(rg int j = 1; j <= n; ++ j)
                if(!dis[i][j]) dis[i][j] = INF;
        //下面是Floyd算法的主要代码
        for(rg int k = 1; k <= n; ++ k) //枚举中转点k
            for(rg int i = 1; i <= n; ++ i)
                for(rg int j = 1; j <= n; ++ j)
                    if(dis[i][j] > dis[i][k] + dis[k][j]) //如果有了更好的方案
                        dis[i][j] = dis[i][k] + dis[k][j]; //就更新dis[i][j]的值
        printf("%d", dis[1][n]); //输出从1到n的最低租金
        return 0;
    }
    转载是允许的,但是除了博主同意的情况下,必须在文章的明显区域说明出处,否则将会追究其法律责任。
  • 相关阅读:
    关于JDK 安装,以及Java环境的设置
    DHCP snooping
    解除破解正版Kindle电子书籍的版权限制
    广东地区电信官方DNS服务器
    Bash脚本15分钟进阶指导
    视听说英语
    华中师大2013新生群
    【强网杯2018】Gamebox
    【强网杯2018】逆向hide
    【Wechall.net挑战】Anderson Application Auditing
  • 原文地址:https://www.cnblogs.com/Xray-luogu/p/9551147.html
Copyright © 2011-2022 走看看