题目背景

NOIp1996提高组第三题

题目描述

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

输入输出格式

输入格式:
输入文件mine.in有若干行。 第1行只有一个数字,表示地窖的个数N。 第2行有N个数,分别表示每个地窖中的地雷个数。 第3行至第N+1行表示地窖之间的连接情况: 第3行有n-1个数(0或1),表示第一个地窖至第2个、第3个、…、第n个地窖有否路径连接。如第3行为1 1 0 0 0 … 0,则表示第1个地窖至第2个地窖有路径,至第3个地窖有路径,至第4个地窖、第5个、…、第n个地窖没有路径。 第4行有n-2个数,表示第二个地窖至第3个、第4个、…、第n个地窖有否路径连接。 … … 第n+1行有1个数,表示第n-1个地窖至第n个地窖有否路径连接。(为0表示没有路径,为1表示有路径)。 输出格式:
输出文件wdl.out有两行数据。 第一行表示挖得最多地雷时的挖地雷的顺序,各地窖序号间以一个空格分隔,不得有多余的空格。 第二行只有一个数,表示能挖到的最多地雷数。 输入输出样例 输入样例#1: 复制
5
10 8 4 7 6
1 1 1 0
0 0 0
1 1
1
输出样例#1: 复制
1 3 4 5
27

数据很小,可以用一用 生疏的 DFS做,也是很快的。

既然数据小,邻接矩阵完全可行。

答案输出就是一个链表。

//Writer:GhostCai && His Yellow Duck

#include<iostream>
using namespace std; const int MAXN=25; int link[MAXN][MAXN];
int w[MAXN];
int n; int son[MAXN];
int dfs(int id){
int ans=0,ansid=id,tmp;
for(int i=1;i<=n;i++){
if(link[id][i]&&i>id){
tmp=dfs(i);
if(tmp>ans){
ans=tmp;
ansid=i;
son[id]=i;
}
}
}
return ans+w[id];
} int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>w[i];
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
cin>>link[i][j];
}
}
int ans=0,ansid;
for(int i=1;i<=n;i++){
int tmp=dfs(i);
if(tmp>ans){
ans=tmp;
ansid=i;
}
}
while(ansid){
cout<<ansid<<" ";
ansid=son[ansid];
}
cout<<endl<<ans<<endl; }

正解当然是DP,就是一个DAG

注意每步比上步序号大。

//Writer:GhostCai && His Yellow Duck

#include<iostream>
using namespace std; const int MAXN=25; int link[MAXN][MAXN];
int f[MAXN];
int w[MAXN];
int n; int son[MAXN];
int dfs(int id){
int ans=0,ansid=id,tmp;
for(int i=1;i<=n;i++){
if(link[id][i]&&i>id){
tmp=dfs(i);
if(tmp>ans){
ans=tmp;
ansid=i;
son[id]=i;
}
}
}
return ans+w[id];
} int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>w[i],f[i]=w[i];
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
cin>>link[i][j];
}
}
for(int i=n;i>=1;i--){
for(int j=i+1;j<=n;j++){
if(link[i][j]&&f[j]+w[i]>f[i]){
f[i]=f[j]+w[i];//!!w[j]
son[i]=j;
}
}
}
int ans=0,ansid;
for(int i=1;i<=n;i++){
if(f[i]>ans){
ans=f[i];
ansid=i;
}
}
while(ansid){
cout<<ansid<<" ";
ansid=son[ansid];
}
cout<<endl<<ans<<endl; }

[LUOGU] P2196 挖地雷的更多相关文章

  1. 洛谷P2196 挖地雷 [2017年4月计划 动态规划13]

    P2196 挖地雷 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之 ...

  2. 「 Luogu P2196 」 挖地雷

    # 解题思路 跑 $\text{n}$ 遍 $\text{spfa}$ 并记录路径,找到比当前最长路长的就更新答案,并且将路径也更新,注意起点的处理. # 附上代码 #include <iost ...

  3. 洛谷—— P2196 挖地雷

    https://www.luogu.org/problem/show?pid=2196 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定 ...

  4. 洛谷 p2196 挖地雷 题解

    好久没有写博客了,今天水几篇博客 传送门 挖地雷这个题之前在  信息学奥赛一本通  上做过几乎一样的题,但是由于数据太水导致我当时过了,进而导致我昨天(4.28)考试丢了20分,今天写一篇题解 这个挖 ...

  5. P2196 挖地雷

    题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任一处 ...

  6. 洛谷——P2196 挖地雷

    题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任一处 ...

  7. 洛谷P2196 挖地雷(dp)

    题意 题目链接 Sol 早年NOIP的题锅好多啊.. 这题连有向边还是无向边都没说(害的我wa了一遍) 直接\(f[i]\)表示到第\(i\)个点的贡献 转移的时候枚举从哪个点转移而来 然后我就用一个 ...

  8. 洛谷 P2196 挖地雷 & [NOIP1996提高组](搜索,记录路径)

    传送门 解题思路 就是暴力!!! 没什么好说的,总之,就是枚举每一个起点,然后暴力算一遍以这个点为起点的所有路径,在算的过程中,只要比目前找到的答案更优,就有可能是最后的答案,于是就把路径更新一遍,保 ...

  9. 洛谷 P2196 挖地雷

    题目传送门 解题思路: 记忆化搜索,题目比较坑的地方在于,这是个有向图,给的边是单向边!!!!!!!! AC代码: #include<iostream> #include<cstdi ...

随机推荐

  1. Phpstorm建立连接Wampserver的数据库

    phpstorm是一款php集成开发环境软件,集成了很多功能,不但有强大的代码编辑及调试功能,还能连接数据库.本文写的就是如何用phpstorm来建立访问wampserver数据库,查询输出数据,方便 ...

  2. bzoj5148:[BeiJing2018]Kakuro

    传送门 有上下界最小费用可行流,行列建边变形. 行列建边相信大家都做过,没做过的可以看一下这个题:bzoj3698XWW的难题,对应的我写的题解题解 这个题需要变形一下,不只是单纯的对行列进行连边,首 ...

  3. SpringBoot | idea新建项目

    1.new ----> Spring Initializr 2.设置相应文件名 3.选择需要配置

  4. PostgreSQL-4-DML数据操纵语言

    1.查询语句 \h SELECT  查看SELECT语句说明 基本语法 SELECT column1, column2, columnN FROM table_name;  查询单列/多列数据 SEL ...

  5. ko.js循环绑定值问题(工作遇见)

    fewTags()这是一个数组,循环实现以上效果,箭头所指的不属于循环出来的值, 以前循环是绑定在<div class="file-tag-list">中造成编辑不能在 ...

  6. scrapy的中间件Downloader Middleware实现User-Agent随机切换

    scrapy的中间件Download Middleware实现User-Agent随机切换   总架构理解Middleware 通过scrapy官网最新的架构图来理解: 从图中我们可以看出,在spid ...

  7. [arc063]F.すぬけ君の塗り絵2

    因为这题考虑可以观察一个性质,答案的下界为 \(2×(max(w,h)+1)\), 因为你至少可以空出一行或一列,因此这个矩形一定会经过 \(x=\frac{w}{2}\) 或 \(y=\frac{h ...

  8. python __new__ __init__ 区别

    参数 __new__的第一个占位参数是class对象 __init__的第一个占位参数是class的实例对象 其他的参数应一致 作用 __new__ 用来创建实例,在返回的实例上执行__init__, ...

  9. [异常]undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>

    在进行Rspec 编译测试: bundle exec rspec spec/requests/static_pages_spec.rb 提示错误: FF Failures: 1) Static pag ...

  10. JavaScript之执行环境及作用域

        执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中.我们编写的代码是无法访问这个对象的,但解 ...