当前位置: 首页 > news >正文

【HDU No. 1224】 免费DIY之旅

【HDU No. 1224】 免费DIY之旅

杭电OJ还是进不去

在这里插入图片描述

看看题目吧直接。

【题意】

旅游公司展示了一种新型DIY线路。

各线路都包含一些可由游客自己选择的城市。根据该公司的统计数据,每个城市都有自己的评分,评分越高越有趣。例如,巴黎的评分是90,纽约的评分是70,等等。世界上不是任何两个城市之间都可以直飞的,因此旅游公司提供了一张地图,告诉游客是否可以在地图上任意两个城市之间直飞。在地图上用一个数字标记每个城市,一个数字较大的城市不能直接飞往数字较小的城市。

薇薇从杭州出发(杭州是第1个城市,也是最后1个城市,所以杭州被标记为1和N +1),它的评分为0。薇薇希望尽可能地让游览变得有趣。

【输入输出】

输入:

第1行是整数T ,表示测试用例数。每个测试用例的第1行都是一个整数N (2≤N ≤100),表示城市数。然后是N 个整数,表示城市的评分。接着是整数M ,后跟M 对整数Ai 、Bi (1≤i ≤M ),表示从城市Ai 可以直飞到城市Bi 。

输出:

对于每个测试用例,都单行输出评分之和的最大值和最佳DIY线路。

在测试用例之间都输出一个空行。

【样例】

在这里插入图片描述

【思路分析】

这道题其实就是求解 1~N + 1的最长路径。根据输入样例,构建的图如下图所示

在这里插入图片描述

起点和终点的评分为0,终点4实际上也是起点1,因为起点编号为1和N +1。1→3→1这条路径的评分之和最大,因此答案为90。

【算法设计】

可以使用邻接矩阵存储,使用两个for语句更新。也可以使用SPFA算法求最长路径。

  1. 读入每个节点的评分,将第N +1个节点的评分设置为0。
  2. 读入可以直飞的城市编号,采用邻接矩阵存储。
  3. 枚举j =1…n +1,i =1…j -1,如果map[i ][j ]&&dis[j]<dis[i ]+qd[j ],则
dis[j] = dis[i] + qd[j];
pre[j] = i;
  1. 递归输出最长的回路

【算法实现】

#include<iostream>
#include<cstring>

using namespace std;
#define maxn 110

int qd[maxn];  //有趣点
int pre[maxn] , dis[maxn] , n ,m ; //前驱,和值
int map[maxn][maxn];  //邻接矩阵

void printpath(int i){ //输出最长的回路 
	
	if(i == -1){
		return;
	}
	printpath(pre[i]);
	cout << i << "->";
} 

int main(){
	
	int T, u , v, cas = 0;
	
	cin >> T;
	while(T --){
		
		memset(pre , -1 , sizeof(pre));
		memset(dis , 0 , sizeof(dis));
		memset(map , 0 , sizeof(map));
		
		cin >> n ;
		for(int i = 1;  i <= n ; i++){
			
			cin >> qd[i];
		}
		qd[n + 1] = 0;
		cin >> m;
		for(int i = 1; i <= m ; i++){
			
			cin >> u >> v;
			map[u][v] = 1;
		}
		
		for(int j = 1; j <= n + 1; j ++){
			for(int i = 1; i < j ; i++){
				
				if(map[i][j] && dis[j] < dis[i] + qd[j]){
					
					dis[j] = dis[i] + qd[j];
					pre[j] = i;
				}
			}
		}
		
		if(cas){
			
			cout << endl;
		}
		cout << "CASE " << ++ cas << "#" << endl;
		cout << "points : " << dis[n + 1] << endl;
		cout << "circuit : ";
		
		printpath(pre[n + 1]);  //最后一个节点,手工输出1,所以从 pre[n + 1]开始
		cout << "1" << endl; 
	}
	
	return 0;
}

跑下样例

在这里插入图片描述

OK

相关文章:

  • Android 后台服务之Persistent 属性
  • 鸿蒙交互事件开发04——手势事件
  • 静态标注rtk文件参数解析
  • Python全网最全基础课程笔记(七)——列表,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
  • 云计算之大数据(上)
  • [数据结构] 哈希结构的哈希冲突解决哈希冲突
  • R 贝叶斯输出分析和诊断MCMC:coda包
  • 图论|207. 课程表 210. 课程表 II
  • 个人建站前端篇(七)vite + vue3企业级项目模板
  • 【C语言】学生宿舍信息管理系统
  • 【高德地图】Android高德地图控件交互详细介绍
  • 2024.2.26
  • 中国软件三季度业绩预测,中国软件股票趋势预测
  • 【MATLAB教程案例26】图像特征点提取算法matlab仿真与分析——sift,surf,kaze,corner,BRISK等
  • Tinyhttpd -- 用 C 从零写一个 HTTP 服务器
  • 计算机网络--应用层(https)
  • LeetCode每日一题——902. 最大为 N 的数字组合
  • 【上传图片,文件,视频功能合集】vue-elementul简单实现上传文件,上传图片,上传视频功能【详细注释,简单易用】
  • 大学四年庸庸碌碌,我弯道超车上了软件测试
  • 信安软考 第十八章 网络安全测评技术与标准
  • 粒子群算法PSO求解最大值和最小值案例(超详细注释)
  • ArrayList和CopyOnWriteArrayList
  • Java中的JDK动态代理
  • 基于Springboot实现留守儿童管理系统
  • go-zero 成长之路—微服务电商实战系列(六、条件查询)
  • 注意力机制以及实现
  • 物联网ARM开发-9STM32窗口看门狗
  • 【附源码】计算机毕业设计SSM软件缺陷管理系统
  • GVIM基础教程——vimscript编程初步(一)
  • 企业级低代码平台Jeecgboot3.4.2及3.4.3版本新功能介绍
  • BERT之后,NLP主要预训练模型演变梳理
  • 一文读懂C++20新特性之概念、约束(concept, constraint)