洛谷 P1359 租用游艇

这篇具有很好参考价值的文章主要介绍了洛谷 P1359 租用游艇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目链接

P1359 租用游艇 普及

题目描述

长江游艇俱乐部在长江上设置了 n n n 个游艇出租站 1 , 2 , 3 , . . . , n 1,2,3,...,n 1,2,3,...,n,游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站 i i i 到游艇出租站 j j j 之间的租金为 r ( i , j ) ( 1 ≤ i ≤ j ≤ n ) r(i,j) \quad (1 \leq i \leq j \leq n) r(i,j)(1ijn)

请计算出从 出租站 1 1 1 到 出租站 n n n 所需的最少租金。

输入格式

第一行中有一个正整数 n n n ,表示有 n n n 个游艇出租站。

接下来的 n − 1 n - 1 n1 行是一个半矩阵 r ( i , j ) ( 1 ≤ i ≤ j ≤ n ) r(i,j) \quad (1 \leq i \leq j \leq n) r(i,j)(1ijn)

输入格式

输出计算出的从游艇出租站 1 1 1 到游艇出租站 n n n 所需的最少租金

数据范围

n ≤ 200 n≤200 n200,保证计算过程中任何时刻数值都不超过 1 0 6 10^6 106

示例1:

输入:

3
5 15
7

输出:

12

解法:贪心

我们定义邻接矩阵 g g g g [ i ] [ j ] g[i][j] g[i][j] 记录的是 出租站 i i i 到 出租站 j j j 的距离。

我们定义 f [ i ] f[i] f[i] 表示从 出租站 1 1 1 到 出租站 i i i 所需要的最小租金。按照定义,我们最终返回的答案就是 f [ n ] f[n] f[n]

我们可以得出如下状态转移方程:

f [ i ] = m i n { f [ i ] , f [ j ] + g [ j ] [ i ] } ( 1 ≤ j < i ) f[i] = min \{ f[i] , f[j] + g[j][i] \} \quad (1 \leq j < i) f[i]=min{f[i],f[j]+g[j][i]}(1j<i)

时间复杂度: O ( n 2 ) O(n^2) O(n2)

C++代码:文章来源地址https://www.toymoban.com/news/detail-744247.html

#include<iostream>
#include<vector>

using namespace std;

const int N = 210;
int g[N][N];

void solve(){
    int n;
    cin>>n;
    for(int i = 1;i < n;i++){
        for(int j = i + 1;j <= n;j++){
            cin>>g[i][j];
        }
    }
    
    vector<int> f(n + 1 , 1e9);
    
    f[1] = 0;
    
    for(int i = 2;i <= n;i++){
        for(int j = 1;j < i;j++) f[i] = min(f[i] , f[j] + g[j][i]);
    }
    
    cout<<f[n]<<'\n';
}

int main(){
    solve();
    return 0;
}

到了这里,关于洛谷 P1359 租用游艇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【洛谷】数字三角形(动态规划)

    目录 边读边存 优化成一维数组——倒序没用了? 从上往下存,最大值存在最后一行,最后遍历最后一行得到最大值的写法  边读边存,可以有效降低时间复杂度 在上一篇文章(【洛谷】采药(01背包问题))将二维数组优化成一维数组的过程中,内层循环我们是采用倒序的方

    2024年02月16日
    浏览(39)
  • 【洛谷】【动态规划】P1006:传纸条(C/C++)

    小渊和小轩是好朋友也是同班同学,他们在一起 总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到

    2024年04月10日
    浏览(47)
  • 【洛谷 P4017】最大食物链计数 题解(深度优先搜索+动态规划+邻接表+记忆化搜索+剪枝)

    你知道食物链吗?Delia 生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条。于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧。 给你一个食物网,你要求出这个食物网中最大食物链的数量。 (这里的“最大食物链”,指的

    2024年04月15日
    浏览(31)
  • 【题单】一个动态更新的洛谷综合题单

    洛谷试炼场的题目确实很具有代表性,但是近几年以来,又有许多经典题目出现在 OI 界中,这个大题单就是作为洛谷试炼场的扩展和补充。 目录 新版本食用指南 更新日志 题单 Part 0 试机题 Part 1 入门阶段 Part 2 基础算法 Part 3 搜索 Part 4 动态规划 Part 4.1-4.4 动态规划 Part 4.5-

    2024年02月19日
    浏览(34)
  • 【算法】动态规划 ① ( 动态规划简介 | 自底向上的动态规划示例 | 自顶向下的动态规划示例 )

    动态规划 , 英文名称 Dynamic Programming , 简称 DP , 不是具体的某种算法 , 是一种算法思想 ; 具体的算法都有具体的步骤 , 如 : 二分法 , 其 有固定的解决步骤 , 先取一个中心点 , 判断解在左边还是右边 , 然后在一边再取一个中心点 , 再进行判定 , 该算法有具体的步骤 ; 动态规划

    2024年01月16日
    浏览(46)
  • 动态规划:什么是动态规划?

    动态规划(Dynamic Programming,简称Dp) 是 一种算法思想 : 将原(大)问题化解成子问题,再根据子问题的解得出原问题的解; 状态转移方程 :是一种组合关系,描述了一种原问题与子问题的组合关系 PS: 看着描述和最优子结构问题的描述一样,其实就是一样,一个是文字描述,

    2024年02月08日
    浏览(51)
  • 【算法】动态规划 ⑧ ( 动态规划特点 )

    求解类型 : 动态规划 必须是求 最值 , 可行性 , 方案数 , 三者之一 , 如果求其它内容 , 则不能使用动态规划算法 ; 求最值 : 最大值 , 最小值 等 ; 大规模问题的结果 由 小规模问题 的计算结果 取最大值 大规模问题的结果 由 小规模问题 的计算结果 取最小值 可行性 : 是否可行

    2023年04月08日
    浏览(48)
  • 动态规划入门之线性动态规划

    P1115 最大子段和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目要求求连续得一段子串使其累加和最大。 我们做动态规划首先考虑小情况,然后推而广之。 假设三个数1,-2,5. 我们先选1然后我们在-2以及-2加1里边选,我们选-1,接着我们在-1以及5里边选我们选择5 由此我们发

    2024年02月12日
    浏览(56)
  • 【动态规划专栏】--简单-- 动态规划经典题型

    目录 动态规划 动态规划思维(基础) 状态表示(最重要) 状态转移方程(最难) 初始化(细节) 填表顺序(细节) 返回值(结果) 解码方法⭐⭐ 【题目解析】   【算法原理】 C++ 算法代码 复杂度分析 【空间优化 - 滚动数组】 C++ 算法代码 复杂度分析 【DP边界、初始化

    2024年02月08日
    浏览(104)
  • 【动态规划】从入门到实践---动态规划详解

    目录 1.动态规划概念 一.定义数组元素的含义 二.找到数组元素之间的关系表达式 三.找到初始值 2.案例详解 一:爬楼梯 1.定义数组元素的含义 2.找到数组元素之间的关系表达式 3.找到初始值 案例二:最短路径 题目: 做题步骤: 1.定义数组的含义 2.找到数组元素之间的关系表

    2024年02月02日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包