洛谷 P1359 租用游艇

2023-05-16

题目描述

长江游艇俱乐部在长江上设置了 nn 个游艇出租站 1,2,\cdots,n1,2,⋯,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站 ii 到游艇出租站 jj 之间的租金为 r(i,j)r(i,j)(1\le i\lt j\le n1≤i<j≤n)。试设计一个算法,计算出从游艇出租站 11 到游艇出租站 nn 所需的最少租金。

输入格式

第一行中有一个正整数 nn,表示有 nn 个游艇出租站。接下来的 n-1n−1 行是一个半矩阵 r(i,j)r(i,j)(1\le i<j\le n1≤i<j≤n)。

输出格式

输出计算出的从游艇出租站 11 到游艇出租站 nn 所需的最少租金。

输入输出样例

输入 #1复制


3
5 15
7

  

输出 #1复制


12

  

说明/提示

n\le 200n≤200,保证计算过程中任何时刻数值都不超过 10^6106。

原题链接->传送门

依次更新从1到每个节点的最短距离,最后求出到最后一个节点n的距离,开始敲完代码测试题目给的数据结果倒是对了,但我感觉交上去应该不会过,自己画了图换了数据果然有问题,后面再改,换了好多组数据测都没什么问题了,但是交上去只有42分。 

 

 

下面是错误代码和测试数据: 

#include <bits/stdc++.h>
using namespace std;

const int inf = 1e9 + 5;
const int N   = 205;//n<=200
int vis[N];//节点访问标记数组
int low[N];//记录最短路径的数组
int Map[N][N];//图的储存数组
int n;//游艇出租站数量
 
int Dijkstra(int begin, int end)//dijkstra算法,传入起点和终点
{
    // 初始化
    for (int i = 1; i <= n; i++)
	{
        low[i] = inf;
        vis[i] = false;//初始化每个节点的标记为空 
    }
    low[begin] = 0;
    vis[begin] = true;//源节点
	 
    for (int i = 2; i <= n; i++)
	{
		low[i] = Map[begin][i];//初始化最短距离为直接距离,这里是最少租金
	}
	
	/*-------------------------------------------------------------------------------------------------*/
    for (int i = 2; i <= n; i++)
	{
        // 找到一个最短的,并且记录下来
        int Min = inf, idx = -1;//初始化
        for (int j = i; j <= n; j++)
		{
            if (low[j] < Min)
			{
                Min = low[j];
                idx = j;
            }
        }
        vis[idx] = true;//查找未访问的low[ i ]的最小值,记录最小下标index并记m_len=low[ index ],
		//标记已访问visit[ index ] = true,直到所有visit数组均为true,low[ end ]为所求值
		cout << "i=" << i << " Min=" << Min << " idx=" << idx << endl ;
        // 更新
        for (int j = 2; j <= n; j++)
		{
            if (low[j] > Min + Map[idx][j])
			{
				printf("Map[%d][%d] = %d\n",idx,j,Map[idx][j]);
                low[j] = Min + Map[idx][j];
                vis[false];
            }
			cout << "low[" << j << "]=" << low[j] << endl ;
        }
    }
	/*-------------------------------------------------------------------------------------------------*/
    return low[end];//返回最少租金 
}
 
int main()
{
    cin >> n ;//n个游艇出租站 
    
    for(int i = 1 ; i <= n ; i++)//将Map数组初始化为0 
    {
    	for(int j = 1 ; j<= n ; j++)
    	{
    		Map[i][j] = 0 ;
		}
	}
	
    for (int i = 1 ; i <= n-1 ; i++)//n-1行半矩阵 
	{
        for(int j = i+1; j <= n ; j++)
        {
        	cin >> Map[i][j] ;//代表第i个游艇站到第j个游艇站的租金
		}
    }
    /*for (int i = 1 ; i <= n-1 ; i++)//n-1行半矩阵 
	{
        for(int j = i+1; j <= n ; j++)
        { 
			printf("第%d个游艇站到第%d个游艇站的租金=",i,j);
        	cout << Map[i][j] <<endl;//代表第i个游艇站到第j个游艇站的租金
		}
    }*/
    cout << Dijkstra(1,n) ;//游艇出租站 1 到游艇出租站 n 所需的最少租金
    
    return 0;
}

/*
测试数据1:
3
5 15
7
结果1:12 
测试数据2: 
5
1 4 6 20
7 6 10
3 7
2
结果2:
8 
测试数据3:
5
1 4 8 20
7 6 10
3 7
2 
结果3:
9 
测试数据4:
5
2 4 8 20
7 6 10
3 7
2 
结果4:
9 
*/ 

//用了标记数组后的,更离谱,只有32分
#include <bits/stdc++.h>
using namespace std;

const int inf = 1e9 + 5;
const int N   = 205;//n<=200
int vis[N];//节点访问标记数组
int low[N];//记录最短路径的数组
int Map[N][N];//图的储存数组
int n;//游艇出租站数量
 
int Dijkstra(int begin, int end)//dijkstra算法,传入起点和终点
{
    // 初始化
    for (int i = 1; i <= n; i++)
	{
        low[i] = inf;
        vis[i] = false;//初始化每个节点的标记为空 
    }
    low[begin] = 0;
    vis[begin] = true;//源节点
	 
    for (int i = 2; i <= n; i++)
	{
		low[i] = Map[begin][i];//初始化最短距离为直接距离,这里是最少租金
	}
	
	/*-------------------------------------------------------------------------------------------------*/
    for (int i = 2; i <= n; i++)
	{
        // 找到一个最短的,并且记录下来
        int Min = inf, idx = -1;//初始化
        for (int j = i; j <= n; j++)
		{
            if (!vis[j] && low[j] < Min)
			{
                Min = low[j];
                idx = j;
            }
        }
        vis[idx] = true;//查找未访问的low[ i ]的最小值,记录最小下标index并记m_len=low[ index ],
		//标记已访问visit[ index ] = true,直到所有visit数组均为true,low[ end ]为所求值
		//cout << "i=" << i << " Min=" << Min << " idx=" << idx << endl ;
        //更新
        for (int j = 2; j <= n; j++)
		{
            if (low[j] > Min + Map[idx][j])
			{
				//printf("Map[%d][%d] = %d\n",idx,j,Map[idx][j]);
                low[j] = Min + Map[idx][j];
                //vis[false];
            }
			//cout << "low[" << j << "]=" << low[j] << endl ;
        }
    }
	/*-------------------------------------------------------------------------------------------------*/
    return low[end];//返回最少租金 
}
 
int main()
{
    cin >> n ;//n个游艇出租站 
    
    for(int i = 1 ; i <= n ; i++)//将Map数组初始化为0 
    {
    	for(int j = 1 ; j<= n ; j++)
    	{
    		Map[i][j] = 0 ;
		}
	}
	
    for (int i = 1 ; i <= n-1 ; i++)//n-1行半矩阵 
	{
        for(int j = i+1; j <= n ; j++)
        {
        	cin >> Map[i][j] ;//代表第i个游艇站到第j个游艇站的租金
		}
    }
    /*for (int i = 1 ; i <= n-1 ; i++)//n-1行半矩阵 
	{
        for(int j = i+1; j <= n ; j++)
        { 
			printf("第%d个游艇站到第%d个游艇站的租金=",i,j);
        	cout << Map[i][j] <<endl;//代表第i个游艇站到第j个游艇站的租金
		}
    }*/
    cout << Dijkstra(1,n) ;//游艇出租站 1 到游艇出租站 n 所需的最少租金
    
    return 0;
}

呜呜呜,实在是改不动了,小花看完我的代码帮我改了一些细节,先不说了,我要肝题了555~,今晚回家才发现题组明早截至,一整个愣住

AC代码:

#include <bits/stdc++.h>
using namespace std;

const int inf = 1e9 + 5;
const int N   = 205;//n<=200
int vis[N];//节点访问标记数组
int low[N];//记录最短路径的数组
int Map[N][N];//图的储存数组
int n;//游艇出租站数量

int Dijkstra(int begin, int end)//dijkstra算法,传入起点和终点
{
    // 初始化
    for (int i = 1; i <= n; i++)
    {
        low[i] = inf;
        vis[i] = false;//初始化每个节点的标记为空
    }
    low[begin] = 0;
    vis[begin] = true;//源节点

    for (int i = 1; i <= n; i++)
    {
        low[i] = Map[begin][i];//初始化最短距离为直接距离,这里是最少租金
    }
    for (int i = 1; i <= n; i++)
    {
        // 找到一个最短的,并且记录下来
        int Min = inf, idx = -1;//初始化
        for (int j = 1; j <= n; j++)
        {
            if (!vis[j] && low[j] < Min)
            {
                Min = low[j];
                idx = j;
            }
        }
        vis[idx] = true;
        if(idx == -1) //不能连接
            break;
        for (int j = 1; j <= n; j++)
        {
            if (!vis[j] && (low[j] > Min + Map[idx][j]))
            {
                low[j] = Min + Map[idx][j];

            }
        }
    }
    return low[end];
}

int main()
{
    cin >> n ;//n个游艇出租站

    for(int i = 0 ; i <= n ; i++)//将Map数组初始化为0
    {
        for(int j = 0 ; j<= n ; j++)
        {
            if(i==j)
                Map[i][j] = 0 ;
            else
                Map[i][j] = inf;
        }
    }

    for (int i = 1 ; i <= n-1 ; i++)//n-1行半矩阵
    {
        for(int j = i+1; j <= n ; j++)
        {
            cin >> Map[i][j] ;//代表第i个游艇站到第j个游艇站的租金
        }
    }
    cout << Dijkstra(1,n);
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

洛谷 P1359 租用游艇 的相关文章

  • Keil 烧录程序后没有执行

    一 概述 Kell烧录程序成功 xff0c 但是控制板并没有执行 可能有如下原因 二 原因分析及解决办法 1 Reset and Run 现象 xff1a 在这种情况 xff0c 程序烧录进去后 xff0c 并不会自动执行 xff0c 但是
  • 远程文件包含实操

    这是我第一次尝试用远程文件包含解题 xff0c 没想到成功了 首先 xff0c 在服务器上传一个木马文本 老规矩 xff0c user ini文件搞上去 xff0c 指向1 txt 1 txt里直接包含一开始上传木马文本文件的地址 然后就可
  • 输入一个0到999可带小数的数字,输出其个十百位数

    多组输入 int 表达式 xff09 指将表达式中的结果强制转换成整型 include lt stdio h gt int main double a int ge shi bai while scanf 34 lf 34 amp a ba
  • 计算2X4X6X...X100的值(上面是错解,附正解)

    include lt stdio h gt int main int a 61 2 n 61 1 sum 61 1 while n lt 61 50 n 61 n 43 1 sum 61 sum a a 61 a 43 2 printf 3
  • while循环输出100-200的所有整数

    include lt stdio h gt int main int n 61 100 while n lt 61 200 printf 34 d t 34 n n 43 43 return 0
  • 关于如何输出百分号和0.0f%的格式化字符的理解,输出结果为2.684%

    include lt stdio h gt int main int a 61 10433 b 61 280 float f1 f1 61 b 1 0 a 当乘以1 0后 xff0c 才能使算出f1是想要的结果 xff08 0 026838
  • 输入自然数后逆序输出这个数

    include lt stdio h gt int main int a scanf 34 d 34 amp a while a a不等于零时执行此循环 printf 34 d 34 a 10 a 61 a 10 return 0
  • LINUX最小系统安装过程中的Partition Disks分配问题

    问题详细描述 xff1a 在我们安装Debian最小系统 xff08 即双系统windows和linux xff09 过程中在进行内存分配时 xff0c 由于系统需要我们很多时候都得选用英文系统导致可能存在 xff1a 看不懂 不知道怎么进
  • mybatis-plus自定义多表分页查询

    mybati plus多表分页查询 首先编写VO类 xff0c VO类包含了要查询的字段值 xff0c 现在有如下几个表 blog表 span class token annotation punctuation 64 Data span
  • 【Docker学习笔记】2.Debian Docker 安装及CentOS Docker 安装

    前言 本章介绍Debian Docker 安装和CentOS Docker 安装 Debian Docker 安装 Docker 支持以下的 Debian 版本 xff1a 巴斯特 10拉伸 9 xff08 稳定 xff09 拉斯比亚拉伸
  • 超详细的操作符讲解

    操作符的分类 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 1 算术操作符 span class token operator 43 span span class token o
  • Ubuntu 安装中文输入法

    请注意命令中不应该的空格可能导致命令不合法 xff01 一 检查 fcitx 框架 首先 xff0c 要安装中文输入法 xff0c 必须要保证系统上有 fcitx fcitx是一个以 GPL 方式发布的输入法框架 xff0c 安装 fcit
  • 快速幂取模简单用法

    关于快速幂的用法本小白还是思索了挺久的 xff08 因为我不太聪明哈 xff09 xff0c 但是学会了就觉得挺好理解的 下面我用一道例题来简单讲一下它的用法 xff0c 希望能帮你轻松get到 xff01 xff01 例题 xff1a 快
  • robomaster视觉规则细谈

    目录 攻击与检测 弹丸参数 增益点增益 升级效果 击打检测 涂装要求 裁判系统 机器人端各模块 赛事引擎各部分 客户端 服务器 能量机关 小能量机关 大能量机关 算法归纳 攻击与检测 弹丸参数 如图所示 xff0c 赛场中我们使用的弹丸有两
  • 关于如何用python下载文件

    先贴上源代码 xff1a GitHub zhangbaji PythonDownloader 这是一个Python下载http文件的事例 xff0c 只不过目前还无法获取动态文件的文件名 https github com zhangbaji
  • Java打印杨辉三角形

    span class token keyword public span span class token keyword class span span class token class name Taks02 span span cl
  • 第二章 利用ffmpeg把rgb转mp4

    本文章介绍ffmpeg基本使用流程 1 创建编码器 通过枚举id选择编码器类型 AVCodec avcodec find encoder enum AVCodecID id enum AVCodecID id 通过枚举选择编码器类型 AV
  • 栈的相关题目以及出栈时的规律

    今天做了两个有关栈的题目 xff0c 都可以用到出栈时的规律来解题 那么问题来了 xff0c 出栈时的规律是什么呢 xff1f 规律如下 xff1a 已知栈的输入序列是1 2 3 n xff0c 输出序列是a1 a2 ai an 然后我们任
  • Python 中 jieba 库

    文章目录 jieba库一 简介1 是什么2 安装 二 基本使用1 三种模式2 使用语法2 1 对词组的基本操作2 2 关键字提取2 3 词性标注2 4 返回词语在原文的起止位置 jieba库 一 简介 1 是什么 xff08 1 xff09
  • 【栈与队列】之栈的顺序存储(图文详细介绍!!)

    前言 xff1a 本章基于 大话数据结构 和王卓老师的视频内容 xff0c 为刚接触数据结构的初学者提供一些帮助 x1f495 如果我的文章对你有帮助 xff0c 点赞 收藏 留言都是对我最大的动力 目录 4 1 栈的定义 4 2 栈的抽象

随机推荐

  • 【C语言技能树】程序环境和预处理

    Halo xff0c 这里是Ppeua 平时主要更新C语言 xff0c C 43 43 xff0c 数据结构算法 感兴趣就关注我吧 xff01 你定不会失望 x1f308 个人主页 xff1a 主页链接 x1f308 算法专栏 xff1a
  • Java中输出所有的水仙花数

    问题描述 打印出所有的 水仙花数 xff0c 所谓 水仙花数 是指一个三位数 xff0c 其各位数字立方和等于该数本身 例如 xff1a 153是一个 水仙花数 xff0c 因为153 61 1的三次方 43 5的三次方 43 3的三次方
  • pip3 设置阿里云

    pip3 install r requirements txt 报超时 xff0c 于是设置阿里云作为安装源 xff1a pip3 config set global index url http mirrors aliyun com py
  • 输入一个数组,将其逆序输出

    今天参加了校内的计算机技能大赛 xff0c 找到了一道较为简单的题 xff0c 就是 将数组逆序输出 下面我将详细讲解一下代码思路 xff0c 好了 xff0c 老规矩 xff0c 先上代码 xff01 include lt bits st
  • 虚拟机中Ubuntu安装了anaconda3无法使用conda

    ubuntu 中安装了 anaconda3 但是无法 使用 conda 只会出现这句话 conda 未找到指令 我找了一些办法 xff0c 有一个有用的 xff1a 8条消息 Ubuntu下使用Anaconda3 出现conda 未找到命令
  • ubuntu配置nfs时Failed to start nfs-server.service: Unit nfs-server.service not found.

    在ubuntu系统中配置nfs时出现Failed to start nfs server service Unit nfs server service not found 原因 xff1a 新装的ubuntu系统并未安装nfs 应使用su
  • 【经验分享】使用Keil5烧录代码遇到的问题及解决方法

    目录 一 前言 二 所遇问题及解决方法 1 首先最基本的Options for target 编辑的设置不用多说 xff0c 下载器根据自己所使用的类型进行选择 我使用的是CMSIS DAP 2 第二种可能出现的问题如下 SWD JTAG
  • c++ delete与析构函数的注意点

    问题 xff1a 我们都知道析构函数在类对象作用域结束时自动调用 xff0c 但这个规则适合基本类型 xff0c 但不适合delete函数 原因 xff1a 如果对象是new运算符动态创建的 xff0c 如果最后没有调用delete xff
  • 超详细!JAVA实现顺序表类

    Seqlist类 增 删 改 查 xff0c 判断是否为空 public class Seqlist lt T gt protected int n 顺序表元素个数 protected Object element 顺序表元素 public
  • 超详细!java实现链表

    Node lt T gt 结点类 public class Node lt T gt 结点类 数据域 xff1a data 存取域 xff1a next public T data 数据域 public Node lt T gt next
  • 超详细!java实现String部分方法

    java的String功能特点 Sring字符串是一个类 xff0c 属于引用数据类型 xff0c 提供比较大小 连接串等方法 String的对象是不是一个字符数组 xff0c 不能以数组下标格式s i 进行操作 xff0c 这和c c 4
  • 关于Java 的throw的一些注意的小点

    throw throw是程序中明确引发异常 xff0c 一旦执行到throw xff0c 程序就会被中断 xff0c 下面的代码就不会被执行 xff01 结论 xff1a 在编写代码阶段 xff0c 即使不运行程序 xff0c throw下
  • 栈究竟是什么?

    我们都知道 栈 这个数据结构 xff0c 它最大的特定就是 后进先出 xff0c 那么就会有一个问题 xff1f 真的存在天生就是 后进先出 的数据结构么 xff1f 答案是没有 xff01 结论 xff1a 栈的 后进先出 的规则是由人为
  • Maven的配置

    maven下载 首先登陆官网 点击download 然后点击下载 下载出来的是一个zip文件 直接解压到没有中文目录的文件夹下 我是放到java 中的 基础配置仓库的修改 打开apache maven gt 找到conf文件夹 gt 打开s
  • A - 简单密码(C语言)

    一 题目 Julius Caesar 曾经使用过一种很简单的密码 对于明文中的每个字符 xff0c 将它用它字母表中后 555 位对应的字符来代替 xff0c 这样就得到了密文 比如字符 A 用 F 来代替 如下是密文和明文中字符的对应关系
  • shell编程 -- 基础

    shell是一个命令行解释器 xff0c 它接收应用程序 用户命令 xff0c 然后调用操作系统内核 linux笔记 链接 xff1a https pan baidu com s 16GZCPfUTRzUqIyGnYwPuUg pwd 61
  • 专为折腾而生!老旧电脑安装PVE虚拟机保姆教程

    专为折腾而生 xff01 老旧电脑安装PVE虚拟机保姆教程 这几天玩VMware虚拟机上瘾 xff0c 感觉特别有意思 然而我其实并不满足于只是在这种软件层面上玩玩 xff0c 而想挑战更高级的玩法 xff0c 比如说玩玩可以安装在实体机上
  • idea中hdfs-api案例 :上传文件

    首先导入相关pom文件 lt dependencies gt lt hadoop相关依赖 gt lt dependency gt lt groupId gt org apache hadoop lt groupId gt lt artifa
  • 洛谷 P2078 朋友

    思路是分为两个并查集 xff0c 然后计算下男女人数 xff0c 然后直接比较 xff0c 选小的 代码写的有点麻烦好像 xff0c 交上去也没过 xff0c 虽然结果对了 其实第一遍已经发现有问题了 xff0c 因为比较的时候不小心把小于
  • 洛谷 P1359 租用游艇

    题目描述 长江游艇俱乐部在长江上设置了 nn 个游艇出租站 1 2 cdots n1 2 n 游客可在这些游艇出租站租用游艇 xff0c 并在下游的任何一个游艇出租站归还游艇 游艇出租站 ii 到游艇出租站 jj 之间的租金为 r i j