动态规划——1262:【例9.6】挖地雷
1262:【例9.6】挖地雷时间限制: 1000 ms 内存限制: 65536 KB
提交数: 10831 通过数: 5266
【题目描述】
在一个地图上有n个地窖(n≤200),每个地窖中埋有一定数量的地雷。同时,给
出地窖之间的连接路径,并规定路径都是单向的,且保证都是小序号地窖指向大
序号地窖,也不存在可以从一个地窖出发经过若干地窖后又回到原来地窖的路
径。某人可以从任意一处开始挖地雷,然后沿着指出的连接往下挖(仅能选择一
条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使他能挖到最
多的地雷。【输入】
第一行:地窖的个数;第二行:为依次每个地窖地雷的个数;下面若干行:xiyi //表示从xi可到yi,xi<yi。最后一行为"00"表示结束。【输出】
k1−k2−…−kv //挖地雷的顺序挖到最多的雷。【输入样例】
6
5 10 20 5 4 5
1 2
1 4
2 4
3 4
4 5
4 6
5 6
0 0
【输出样例】
3-4-5-6
34
核心代码:
if(a[j][i]==1&&dp[i]<dp[j]+num[i]){ //通路且dp[i]<dp[j]+num[i]dp[i]=dp[j]+num[i];p[i]=j; //记录最优路线
}
dp[1]=5 dp[2]=15 dp[3]=20 dp[4]=25 dp[5]=29 d[6]=34
p[1]=0 p[2]=1 p[3]=0 p[4]=3 p[5]=4 p[6]=5
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define MAXN 210
using namespace std;
int n,a[MAXN][MAXN],num[MAXN],dp[MAXN],p[MAXN];
/*a数组用于标识通路num数组用于标识地雷数 dp数组用于标识后继的最大地雷数 p数组用于存取最优路线
*/
void print(int k){if(k==0) return;print(p[k]);if(p[k]==0)cout<<k; //如果是第一个点直接输出k else cout<<"-"<<k; //否则输出-k
}int main(){memset(a,0,sizeof(a));memset(dp,0,sizeof(dp));memset(p,0,sizeof(p));cin>>n;for(int i=1;i<=n;i++){cin>>num[i]; //输入地雷数 dp[i]=num[i]; //设置dp数组初值 }int x,y;while(cin>>x>>y,x,y) a[x][y]=1; //标识通路 int ans=-INF,k=0; //将ans设置为一个足够小的数,k用于记录最后挖的地窖 for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(a[j][i]==1&&dp[i]<dp[j]+num[i]){ //通路且dp[i]<dp[j]+num[i]dp[i]=dp[j]+num[i];p[i]=j; //记录最优路线 }}if(dp[i]>ans){ //获取最大地雷数 ans=dp[i]; //ans即为最大地雷数 k=i; //k用来记录最后一个路线 }}print(k); //输出最优路线 cout<<endl<<ans<<endl;return 0;
}
参考:https://blog.csdn.net/zqhf123/article/details/105652581
动态规划——1262:【例9.6】挖地雷相关推荐
- 第九章 动态规划-1262:【例9.6】挖地雷
[题目描述] 在一个地图上有n个地窖(n≤200),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径,并规定路径都是单向的,且保证都是小序号地窖指向在序号地窖,也不存在可以从一个地窖出发经过 ...
- 【动态规划】洛谷P2196 挖地雷
大意 给定一些点和它们间的通道,问最大总点值 思路 一道比较简单的dpdpdp 设f[i]f[i]f[i]表示终点为iii的最大值,显然 f[i]=max{f[能到达i的点]}+a[i]f[i]=ma ...
- 动态规划漫谈(面向初学者的自学总结)
目录 0. 名字的由来 1. 动态规划的适用条件 1.1 最优子结构(optimal substructure) 1.2 重叠子问题(overlapping subproblems) 1.3 无后效 ...
- 图论总结 for noip
图论 很重要的数据结构,noip考试的热点,灵活多变,富有挑战性. 图的存储 邻接矩阵:n2,对稠密图较好,floyd算法的基础,但是在运用时总是需要o(n)的查找,故效率较低,运用的不多仅限数据范围 ...
- 数据结构之图的应用:最短路径(Dijkstra、Floyd)
图的应用:最短路径 思维导图: 最短路径的定义: BFS算法:(无权单源最短路径) Dijkstra算法:(无权单源.带权单源) Dijkstra算法原理: 算法实现中的辅助数组: 例: 如何通过pa ...
- python 文字转表格 openpyxl
python文字转表格主要用到openpyxl模块. 主要的操作要两个,创建表格和写操作. 创建表格: book = Workbook()sheet = book.create_sheet(title ...
- 大厂offer?拿来吧你!网易有道笔试编程题特辑
联系我们:有道技术团队助手:ydtech01 / 邮箱:ydtech@rd.netease.com 欢迎应届生同学们 来到2022年校招运动会 现在迎面向你们走来的 是网易有道代表队! (传送门:ht ...
- Python解题 - CSDN周赛第29期 - 争抢糖豆
本期问哥是志在必得,这本算法书我已经觊觎许久,而之前两次因为种种原因未能如愿.因此,问哥这几天花了不少时间,把所有之前在每日一练做过的题目重新梳理了一遍.苦心人,天不负,感谢官方大大! 第一题:订班服 ...
- 用java解决 《数字转换字符串》
目录 题目 输入描述: 输出描述: 示例1 输入 输出 说明 算法模型: 从i到n,i∈(0,n): 模型特点: 用这个模型的题目有: 递归转动态规划: 思路分析: 暴力递归: 动态规划: 样例推导: ...
最新文章
- Tomcat详解(下)
- 【笔记】基于低空无人机影像和 YOLOv3 实现棉田杂草检测
- boost::geometry::compress_variant用法的测试程序
- 04_mysql增删改操作
- app.vue 跳转页面_【在线教学】第8章 网站页面布局和模块设计
- 调整Linux磁盘分区大小
- Express + TypeScript开发微信应用
- DDC传输协议以及显示器EDID结构介绍
- 基于微信小程序的商城设计
- java 两个图片相似度_JAVA比较两张图相似度
- tcgames使用有延迟_Tcgames下载使用方法
- 目标检测拉近镜头数据增强
- 轻松构建自己的Python开发环境,进入机器学习新世界
- 南宁计算机职称考试网,南宁人事考试职称网
- nwjs编译sqlite3和播放mp3等问题
- Python大牛用的贼溜,9个实用技巧分享给你
- Iocomp 5.12 SP6 ActiveX Crack
- 人事管理系统项目(一)
- web端使用腾讯地图
- 计算机二级java答题演示,计算机二级office操作题考点大总结!