题目地址:

https://www.luogu.com.cn/problem/P2196

题目描述:
在一个地图上有NNN个地窖(N≤20)(N \le 20)(N≤20),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径。当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使某人能挖到最多的地雷。

输入格式:
有若干行。
第111行只有一个数字,表示地窖的个数NNN。
第222行有NNN个数,分别表示每个地窖中的地雷个数。
第333行至第N+1N+1N+1行表示地窖之间的连接情况:
第333行有n−1n-1n−1个数(000或111),表示第一个地窖至第222个、第333个、…、第nnn个地窖有否路径连接。如第333行为11000…01 1 0 0 0 … 011000…0,则表示第111个地窖至第222个地窖有路径,至第333个地窖有路径,至第444个地窖、第555个、…、第nnn个地窖没有路径。
第444行有n−2n-2n−2个数,表示第二个地窖至第333个、第444个、…、第nnn个地窖有否路径连接。
… …
第n+1n+1n+1行有111个数,表示第n−1n-1n−1个地窖至第nnn个地窖有否路径连接。(为000表示没有路径,为111表示有路径)。

输出格式:
有两行
第一行表示挖得最多地雷时的挖地雷的顺序,各地窖序号间以一个空格分隔,不得有多余的空格。
第二行只有一个数,表示能挖到的最多地雷数。

注意题目里说“可以沿着指出的连接往下挖”,意思是从kkk号点只能去k+1,...,Nk+1,...,Nk+1,...,N号点。设g[i][j]g[i][j]g[i][j]表示i→ji\to ji→j是否存在,设f[u]f[u]f[u]是以uuu为终点的所有路径中总地雷数最多的那条的总地雷数。则有f[u]=a[u]+max⁡g[v][u]f[v]f[u]=a[u]+\max_{g[v][u]} f[v]f[u]=a[u]+g[v][u]max​f[v]代码如下:

#include <iostream>
using namespace std;const int N = 205;
int n, a[N], f[N], path[N], cnt;
bool g[N][N];
int res, pre[N], ed;int main() {scanf("%d", &n);for (int i = 1; i <= n; i++) scanf("%d", &a[i]);for (int i = 1; i <= n; i++)for (int j = i + 1; j <= n; j++)scanf("%d", &g[i][j]);for (int i = 1; i <= n; i++) { f[i] = a[i];for (int j = 1; j < i; j++)if (g[j][i] && f[i] < f[j] + a[i])f[i] = f[j] + a[i], pre[i] = j;// 记录一下最优路径的终点if (f[i] > res) res = f[i], ed = i;}while (ed) path[++cnt] = ed, ed = pre[ed];for (int i = cnt; i; i--) printf("%d ", path[i]);puts("");printf("%d\n", res);
}

时间复杂度O(n2)O(n^2)O(n2),空间O(n)O(n)O(n)。

【洛谷】P2196 挖地雷相关推荐

  1. 洛谷P2196 挖地雷

    题目描述 在一个地图上有N个地窖(N≤20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接往下挖(仅能选 ...

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

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

  3. 洛谷P2196 挖地雷 题解 超详细(DPDFS)

    题目传送门 这道题我读时想到两种方法,分别是dp和搜索,于是将两种方法奉上 一.dp 这道题的被放在题单""dp的引入",所以我们就先用dp思考 dp需要考虑数组,转移方 ...

  4. 洛谷 P2196 [NOIP1996 提高组] 挖地雷(dp简单题)

     题目链接: [NOIP1996 提高组] 挖地雷 - 洛谷 思路: 典型的dp题,由于题目规定了只能由编号小的地窖到编号大的,所以dp顺序是确定的,不需要进行拓扑排序,只需要判断 i,j 之间是否有 ...

  5. 2022.12.1洛谷P2196 [NOIP1996 提高组] 挖地雷

    [NOIP1996 提高组] 挖地雷 原题链接:传送门 在一个地图上有N个地窖,每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然 ...

  6. 洛谷--橙色百道DP总结

    最近刷完了洛谷橙色DP大约一百道,算是发现了一些套路,就部分题目做一些总结. 大概分为三类 第一类,九大背包及其衍生 第二类,经典DP模型,如LCS,LIS等 第三类,实际问题背景的普通,环形,树上D ...

  7. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  8. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  9. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  10. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

最新文章

  1. 分享Leangoo敏捷工具操作视频
  2. 企业级java springcloud b2bc商城系统开源源码二次开发-负载均衡策略...
  3. matlab等距线扫描多边形程序实现_常用的3D扫描仪都有哪些类型?
  4. .NET CORE编写控制台程序应有的优雅姿势(转载)
  5. 深入理解Golang 编程思维和工程实战
  6. 数据挖掘实践(金融风控)——task02:数据分析
  7. Python和Matlab系统比较
  8. Pycharm使用os.system()执行cmd代码出现乱码的问题
  9. csp 201512-4 送货(hierholzer算法的递归和堆栈实现)
  10. Macbook下ffmpeg下载失败问题解决
  11. 湘源控规7.0安装 详细图文教程
  12. 2013 EE 排名
  13. 最大团(最大完全子图)
  14. 互动编程习作——表现随机行为及牛顿运动学
  15. [办公应用]word 2007:全屏快捷键,让复制图片保持原样大小(office 全屏快捷键)...
  16. python爬虫阶段性总结和项目实操——爬取猫眼票房Top100
  17. 计算机语言phal语言,[6.1]-基于接口查询语言的SDK包
  18. Docker环境下的前后端分离部署与运维 脚本
  19. linux运维要经常加班吗,请好好善待你身边的Linux运维工程师,因为他们…
  20. linux 下的 包过滤器 BPF

热门文章

  1. PCI EXPRESS体系结构导读(读书笔记)
  2. windows工作机理
  3. kmeans及模型评估指标_基于K-MEANS聚类模型和RFM价值分类模型的订单交易用户价值分析...
  4. 14 Python之生成器,生成器函数以及推导式
  5. B. 豚鼠的定居(模拟)
  6. 开源电路分享のFalling Star Board
  7. HTML常用标签及其属性
  8. Jquery UI sortable
  9. 【愚公系列】2023年06月 网络安全(交通银行杯)-地理位置分析
  10. sortable.js 相关