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】挖地雷相关推荐

  1. 第九章 动态规划-1262:【例9.6】挖地雷

    [题目描述] 在一个地图上有n个地窖(n≤200),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径,并规定路径都是单向的,且保证都是小序号地窖指向在序号地窖,也不存在可以从一个地窖出发经过 ...

  2. 【动态规划】洛谷P2196 挖地雷

    大意 给定一些点和它们间的通道,问最大总点值 思路 一道比较简单的dpdpdp 设f[i]f[i]f[i]表示终点为iii的最大值,显然 f[i]=max{f[能到达i的点]}+a[i]f[i]=ma ...

  3. 动态规划漫谈(面向初学者的自学总结)

    目录 0. 名字的由来 1. 动态规划的适用条件 1.1 最优子结构(optimal substructure) 1.2 重叠子问题(overlapping subproblems) 1.3  无后效 ...

  4. 图论总结 for noip

    图论 很重要的数据结构,noip考试的热点,灵活多变,富有挑战性. 图的存储 邻接矩阵:n2,对稠密图较好,floyd算法的基础,但是在运用时总是需要o(n)的查找,故效率较低,运用的不多仅限数据范围 ...

  5. 数据结构之图的应用:最短路径(Dijkstra、Floyd)

    图的应用:最短路径 思维导图: 最短路径的定义: BFS算法:(无权单源最短路径) Dijkstra算法:(无权单源.带权单源) Dijkstra算法原理: 算法实现中的辅助数组: 例: 如何通过pa ...

  6. python 文字转表格 openpyxl

    python文字转表格主要用到openpyxl模块. 主要的操作要两个,创建表格和写操作. 创建表格: book = Workbook()sheet = book.create_sheet(title ...

  7. 大厂offer?拿来吧你!网易有道笔试编程题特辑

    联系我们:有道技术团队助手:ydtech01 / 邮箱:ydtech@rd.netease.com 欢迎应届生同学们 来到2022年校招运动会 现在迎面向你们走来的 是网易有道代表队! (传送门:ht ...

  8. Python解题 - CSDN周赛第29期 - 争抢糖豆

    本期问哥是志在必得,这本算法书我已经觊觎许久,而之前两次因为种种原因未能如愿.因此,问哥这几天花了不少时间,把所有之前在每日一练做过的题目重新梳理了一遍.苦心人,天不负,感谢官方大大! 第一题:订班服 ...

  9. 用java解决 《数字转换字符串》

    目录 题目 输入描述: 输出描述: 示例1 输入 输出 说明 算法模型: 从i到n,i∈(0,n): 模型特点: 用这个模型的题目有: 递归转动态规划: 思路分析: 暴力递归: 动态规划: 样例推导: ...

最新文章

  1. Tomcat详解(下)
  2. 【笔记】基于低空无人机影像和 YOLOv3 实现棉田杂草检测
  3. boost::geometry::compress_variant用法的测试程序
  4. 04_mysql增删改操作
  5. app.vue 跳转页面_【在线教学】第8章 网站页面布局和模块设计
  6. 调整Linux磁盘分区大小
  7. Express + TypeScript开发微信应用
  8. DDC传输协议以及显示器EDID结构介绍
  9. 基于微信小程序的商城设计
  10. java 两个图片相似度_JAVA比较两张图相似度
  11. tcgames使用有延迟_Tcgames下载使用方法
  12. 目标检测拉近镜头数据增强
  13. 轻松构建自己的Python开发环境,进入机器学习新世界
  14. 南宁计算机职称考试网,南宁人事考试职称网
  15. nwjs编译sqlite3和播放mp3等问题
  16. Python大牛用的贼溜,9个实用技巧分享给你
  17. Iocomp 5.12 SP6 ActiveX Crack
  18. 人事管理系统项目(一)
  19. web端使用腾讯地图
  20. 计算机二级java答题演示,计算机二级office操作题考点大总结!

热门文章

  1. TB6600HG原理图
  2. 网络共享计算机没有密码登不聊,局域网别人无法打开我的共享文档(要密码,可是我没设),怎么解决?...
  3. 武汉工程大学致各位家长及同学们的一封公开信
  4. java 数组元素查找_Java在数组中查找指定元素的方法
  5. A3 PDF 转 A4两页 打印
  6. 订货系统的原理及“四管一做”
  7. C语言百日刷题第七天
  8. python自动投注软件_能帮我开发一个自动投注的脚本吗?
  9. 内部排序算法比较-数据结构C语言课设
  10. 基于STM32和超声波测距传感器的测距功能设计