洛谷P2196 && caioj 1415 动态规划6:挖地雷
没看出来动规怎么做,看到n <= 20,直接一波暴搜,过了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;
const int MAXN = 25;
int g[MAXN][MAXN], a[MAXN], f[MAXN];
int vis[MAXN], path[MAXN], n;
int dfs(int cur)
{
vis[cur] = 1;
int t = 0;
REP(i, 0, n)
if(!vis[i] && g[cur][i])
{
int temp = dfs(i);
if(t < temp)
{
t = temp;
path[cur] = i;
}
}
vis[cur] = 0;
return a[cur] + t;
}
int main()
{
scanf("%d", &n);
REP(i, 0, n) scanf("%d", &a[i]);
REP(i, 0, n)
REP(j, i + 1, n)
scanf("%d", &g[i][j]);
int ans = 0, st;
REP(i, 0, n)
{
memset(path, -1, sizeof(path));
memset(vis, 0, sizeof(vis));
int t = dfs(i);
if(ans < t)
{
st = i;
ans = t;
memcpy(f, path, sizeof(f));
}
}
for(int p = st; p != -1; p = f[p]) printf("%d ", p + 1);
puts("");
printf("%d\n", ans);
return 0;
}
然后我还是想想动规怎么做吧
因为只能往下挖,所以最后一个地窖是挖不了的
所以我们倒着推
我们设f[i]为从i开始能挖到的最大地雷
那么有
f[i] = f[j] + a[i]; i < j, i与j连接
#include<cstdio>
#include<cstring>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;
const int MAXN = 25;
int g[MAXN][MAXN], a[MAXN], f[MAXN];
int path[MAXN], n;
int main()
{
memset(path, -1, sizeof(path));
scanf("%d", &n);
REP(i, 0, n) scanf("%d", &a[i]);
REP(i, 0, n)
REP(j, i + 1, n)
scanf("%d", &g[i][j]);
int ans = 0, st;
for(int i = n - 1; i >= 0; i--)
{
f[i] = a[i];
REP(j, i + 1, n)
if(g[i][j] && f[i] < f[j] + a[i])
{
f[i] = f[j] + a[i];
path[i] = j;
}
if(ans < f[i])
{
ans = f[i];
st = i;
}
}
for(int p = st; p != -1; p = path[p]) printf("%d ", p + 1);
puts("");
printf("%d\n", ans);
return 0;
}
洛谷P2196 && caioj 1415 动态规划6:挖地雷的更多相关文章
- 洛谷P1280 && caioj 1085 动态规划入门(非常规DP9:尼克的任务)
这道题我一直按照往常的思路想 f[i]为前i个任务的最大空暇时间 然后想不出来怎么做-- 后来看了题解 发现这里设的状态是时间,不是任务 自己思维还是太局限了,题做得太少. 很多网上题解都反着做,那么 ...
- 洛谷P2196 挖地雷 [2017年4月计划 动态规划13]
P2196 挖地雷 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之 ...
- 洛谷 p2196 挖地雷 题解
好久没有写博客了,今天水几篇博客 传送门 挖地雷这个题之前在 信息学奥赛一本通 上做过几乎一样的题,但是由于数据太水导致我当时过了,进而导致我昨天(4.28)考试丢了20分,今天写一篇题解 这个挖 ...
- 洛谷——P2196 挖地雷
题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任一处 ...
- 洛谷—— P2196 挖地雷
https://www.luogu.org/problem/show?pid=2196 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定 ...
- 洛谷P2196 挖地雷(dp)
题意 题目链接 Sol 早年NOIP的题锅好多啊.. 这题连有向边还是无向边都没说(害的我wa了一遍) 直接\(f[i]\)表示到第\(i\)个点的贡献 转移的时候枚举从哪个点转移而来 然后我就用一个 ...
- 洛谷 P2196 挖地雷 & [NOIP1996提高组](搜索,记录路径)
传送门 解题思路 就是暴力!!! 没什么好说的,总之,就是枚举每一个起点,然后暴力算一遍以这个点为起点的所有路径,在算的过程中,只要比目前找到的答案更优,就有可能是最后的答案,于是就把路径更新一遍,保 ...
- 洛谷 P2196 挖地雷
题目传送门 解题思路: 记忆化搜索,题目比较坑的地方在于,这是个有向图,给的边是单向边!!!!!!!! AC代码: #include<iostream> #include<cstdi ...
- 洛谷 P1464 Function【动态规划(递推)/记忆化搜索(递归)】
题目描述 对于一个递归函数w(a,b,c) 如果a<=0 or b<=0 or c<=0就返回值1. 如果a>20 or b>20 or c>20就返回w(20,2 ...
随机推荐
- Microsoft Edge 针对 Web 开发人员更新日志
Windows 10 build16215 之 Edge 新功能 新功能: 增加了对高级事件监听器的支持(“once”和“passive”)via 增加了对CSS object-fit/object- ...
- hiho1605 - 递推+1000000000=矩阵快速幂
题目链接 题目大意 小Hi最近对生成树(包含所有顶点的联通无环子图.)非常的感兴趣,他想知道对于特定的简单平面无向图是不是存在求生成树个数的简单方法. 小Hi定义了这样的图:一个以{0,1,2……n} ...
- HDU 1175 连连看【BFS】
题意:给出起点和终点的棋子,不能经过别的棋子,而且转弯的次数不能超过2次,问能否消除 和逃离迷宫一样,每个节点记录下来它的当前的方向和转弯的次数,再搜 注意特判起点的棋子和终点的棋子为0或者不一样的情 ...
- 洛谷P3254 圆桌问题 网络流_二分图
Code: #include<cstdio> #include<algorithm> #include<vector> #include<queue> ...
- maven使用技巧
转:MAVEN常用命令 Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ Maven常用命令: 1 ...
- mariadb-增删改查怎么用
MariaDB 数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值. 使用数据类型的原则:够用就行,尽量使用范围小的,而不用大的 常用的数据类型 整数:int, (bit比整数还要小 ...
- yum下载的rpm包离线安装
#修改yum设置,让rpm包缓存到本地 vi /etc/yum.conf #修改keepcache为1 keepcache=1 #清空yum缓存 yum clean all #安装你要离线安装的rpm ...
- Android数据分批载入-滑动究竟部自己主动载入列表
Android数据分批载入-滑动究竟部自己主动载入列表 2014年5月9日 摘自:<Android高级开发实战-ui.ndk与安全> 本博文介绍怎样进行数据分批载入,在应用开发其中会常常使 ...
- iOS gzip解压
1. 导入libz库(如:libz 1.2.5.dylib) 2. 引入头文件 #import "zlib.h" 3. 实现解压(输入输出都为NSData对象) -(NSData ...
- action support分析
Action这一部分主要是数据(索引)的操作和部分集群信息操作. 所有的请求通过client转发到对应的action上然后再由对应的TransportAction来执行相关请求.如果请求能在本机上执行 ...