洛古P2196 题解 兼本人第一篇题解
本人第一篇正式题解!
本题的主要思路:
①求挖地雷的最多个数。
②输出最多地雷的挖掘方法。
明确思路后代码实现
数据范围 n<=20 所以我们完全可以跑n遍DFS 求出其中的可以一次性挖的最多地雷数, 然后再跑一遍 计路DFS 把一个等于这个最多地雷数挖法记录下来输出,本题就结束了,简单易懂的双DFS。
下面是AC代码:
#include<bits/stdc++.h>
using namespace std;
const int INF=2147483647;
int n,a[21];
int f[21][21],step=0;// f[i][j]用来判断i和j是否联通。 step用来记录最多的地雷数
void read(int &x)
{x=0;int p=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-') p=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=p;
}// (读入优化自动忽略)
void dfs(int x,int y)// 求最多地雷数的DFS x来记录当前到达的点,y来记录地雷数目。
{bool p=0;for(int i=1;i<=n;i++){if(f[x][i]){p=1;break;}}// 判断n个地窖里是否有地窖与当前地窖x联通。if(p==0){step=max(y,step);return ;}// 没有地窖联通,已经挖到头了,判断已挖到的地雷是否为最大地雷数。for(int i=1;i<=n;i++){if(f[x][i]) dfs(i,y+a[i]);// 如果联通就挖下去。}
}
int e1[21];// e1数组用来记录挖掘顺序。
bool p=0;
int dfs1(int x,int y,int z)// 记录挖掘顺序的DFS x,y所代表的意义同上,z来记录已经挖了几个地窖。
{if(y==step){p=1;for(int i=0;i<z;i++)cout<<e1[i]<<" ";return 0;}// 如果为最大地雷数,输出所记录的顺序然后直接跳出就好了!for(int i=1;i<=n;i++){if(f[x][i]){e1[z]=i;dfs1(i,y+a[i],z+1);}}
}
int main()
{read(n);for(int i=1;i<=n;i++){read(a[i]);}for(int i=1;i<n;i++){for(int j=i+1;j<=n;j++){int y;read(y);if(y) f[i][j]=1;}}for(int i=1;i<=n;i++){dfs(i,a[i]); }for(int i=1;i<=n;i++){e1[0]=i;dfs1(i,a[i],1);if(p) break;// 已经找到最优顺序,直接Break掉!}cout<<endl<<step;// 换行输出最多地雷数!return 0;
}// AC!!!
洛古P2196 题解 兼本人第一篇题解相关推荐
- BZOJ 2133 切割(树形DP,树上背包)大概是本题全网第一篇题解 >_<【BZOJ 修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ 2133 切割这道题全网搜不到任何一篇题解 >_< 看评测记录也没有几个人AC- ...
- 洛古最简单50题解(1-10)
做为一名新手,首先要过一过题,找找成就感.(大佬略过).下面附上洛古最简单50题(大佬略过).以及最麻烦 AC代码,至少AC了. 目录·列表: 洛古最简单50题解(1-10) 洛古最简单50题解(11 ...
- 洛古最简单50题解(41-50)
做为一名新手,首先要过一过题,找找成就感.(大佬略过).下面附上洛古最简单50题(大佬略过).以及最麻烦 AC代码,至少AC了. 目录·列表: 洛古最简单50题解(1-10) 洛古最简单50题解(11 ...
- 洛古最简单50题解(21-30)
做为一名新手,首先要过一过题,找找成就感.(大佬略过).下面附上洛古最简单50题(大佬略过).以及最麻烦 AC代码,至少AC了. 目录·列表: 洛古最简单50题解(1-10) 洛古最简单50题解(11 ...
- 洛古最简单50题解(31-40)
做为一名新手,首先要过一过题,找找成就感.(大佬略过).下面附上洛古最简单50题(大佬略过).以及最麻烦 AC代码,至少AC了. 目录·列表: 洛古最简单50题解(1-10) 洛古最简单50题解(11 ...
- 洛古最简单50题解(11-20)
做为一名新手,首先要过一过题,找找成就感.(大佬略过).下面附上洛古最简单50题(大佬略过).以及最麻烦 AC代码,至少AC了. 目录·列表: 洛古最简单50题解(1-10) 洛古最简单50题解(11 ...
- 蒟蒻的第一篇博客CF1041C Coffee Break(二分+贪心+set)
CF1041C Coffee Break(二分+贪心+set) 描述 Recently Monocarp got a job. His working day lasts exactly mm min ...
- 洛谷P4390 [BOI2007]Mokia 摩基亚 题解
洛谷P4390 [BOI2007]Mokia 摩基亚 题解 题目链接:P4390 [BOI2007]Mokia 摩基亚 题意:摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和 ...
- 接第一篇博客:fw的第二场CTF——HECTF2021 WP
第一篇博客,第一次参加比赛https://blog.csdn.net/qq_42880719/article/details/110139040就是HECTF 所以这HECTF我非打不可了 想当年,刚 ...
最新文章
- CSS 文字溢出显示省略号
- iOS Sprite Kit教程之申请和下载证书
- 真正的不重复数字实现,像人一样去编程
- C语言程序设计教学探讨,C语言程序设计多媒体教学探讨
- 【图像处理】——Python+opencv实现提取图像的几何特征(面积、周长、细长度、区间占空比、重心、不变矩等)
- matlab保存colormap失败
- sql 显示百分比_轻松搞定数据分析之SQL——简单查询
- 图论 —— 网络流 —— 费用流 —— 基于 Dijkstra 的费用流
- JavaScript replace string 替换字符
- 为应用程序池**提供服务的进程意外终止。进程ID是**。进程退出代码是'0x80'
- mysql配置文件没有权限更改_MySQL配置文件无法修改的解决方法(Win10)
- javascript实现的自适应宽度的瀑布流
- python链表next_链表(python)
- PHP压缩CSS文件
- Hive之表类型解析
- 学习笔记(02):10小时掌握区块链开发教程-2小时构建以太坊智能合约-1
- 4、Unity商店,导入资源
- Spark算子:RDD行动Action操作–aggregate、fold、lookup;reduce/fold/aggregate区别
- 脸上长痘部位详解 从痘痘看身体状况
- windows nginx出现 was not signaled for 5s的看过来