题目背景

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. [原创]内网渗透专用SSH连接工具sshcmd/sshshell/ssh密码破解以及Kali开启SSH

    目录 1.Kali开启SSH 2.SSH连接工具优缺点 3.渗透专用SSH连接工具 4.ssh执行cmd源码 5.批量SSH密码破解 6.相关工具下载 0x001 SSH配置 1.打开文件 etc/s ...

  2. Luogu P1092 虫食算【搜索/剪枝】 By cellur925

    题目传送门 这道题是一道经久不衰的搜索题目,但是开始做的时候我没什么思路==.初始值-1 输出格式 \(naive\)想法 从右往左依次尝试填充数字,把算式当做一个3行\(n\)列的网格.(什么?你问 ...

  3. day01 包 权限修饰符 static final

  4. python如何永久添加模块搜索路径

    win10系统 依次点击:控制面板\系统和安全\系统\高级系统设置\环境变量   找不到的话,直接在设置中搜索  环境变量  也一样 此时上面是用户变量 下面是系统变量   在系统变量中找到PYTHO ...

  5. Python开发 第01课 Python 简介

    一.Python 介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...

  6. 转 PHP函数---$_Get()和$_Post()的用法

    一.$_Get()和$_Post()函数是用来传值的,即对应两种提交表单的方法,get和post. 二.$_Get方法 (1)获取通过URL的传值 Example 1 新建两个PHP文件,1.php, ...

  7. jQuery制作一个多彩下拉菜单按钮

    最终效果图: html代码: <div id="list"> <div id="btn"> <div class="ic ...

  8. GCC在windows下的配置

    http://blog.csdn.net/lan120576664/article/details/46806991 http://blog.csdn.net/shaynerain/article/d ...

  9. ES-windos环搭建-ik中文分词器

    ik下载 打开Github官网,搜索elasticsearch-analysis-ik,单击medcl/elasticsearch-analysis-ik.或者直接点击 在readme.md文件中,下 ...

  10. 增加和减少mongodb复制集中的节点

    MongoDB Replica Sets不仅提供高可用性的解决方案,同时也提供负载均衡的解决方案,增减 Replica Sets节点在实际应用中非常普通.例如,当应用的读压力暴增时,3台节点的环境已不 ...