【记忆化搜索】Navy maneuvers
【来源】:
2008年哈尔滨区域赛题目
【题目链接】:
http://acm.hdu.edu.cn/showproblem.php?pid=2452
【参考博客】:
https://blog.csdn.net/watermuch/article/details/9465185
【题意】:
真的要好好检讨,英语不好,这个题就别想做了。
意译一波,就是船是有两位领导 进行领航,一位叫做V,另一位叫G。
给出一幅有向无环图,每一个节点都有一个权值,如果经过这个节点都会获得对应的权值。
从一个入度为0的节点开始,到某个出度为0的节点停止。
但是两个人的想法不同:
V想要权值和尽可能大,G想要权值和尽可能小。
最后问,给出一个F,如果在一波操作之后获得的权值和大于等于F则”V胜利“,否则就”G荣誉“。
【题解】:
在图上跑DAG最长路,边记录对应的dp值,边跑,如果当前领航的人是谁,就分别写出对应的走法。
一定需要记忆化搜索,主要是因为多个起点,记忆化尽可能减少复杂度。
【代码】:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+; vector<int>G[N];
int dp[N][],w[N],du[N];
int n,m,f; /*
多组输入,记住要清空
*/
void Init(){
for(int i=;i<=n;i++){
du[i] = dp[i][] = dp[i][] = ;
G[i].clear();
}
}
/*
DAG记忆化搜索
dp[i][1/0]
对于第i个节点来说:
[1]——V在领航,他想要权值最大化。
[0]——G在领航,他想要权值最小化。 */ int dfs(int u,int cur){ cur %= ;
if( dp[u][cur] ) return dp[u][cur]; int Size = G[u].size() ;
if( Size == ) return w[u] ; int maxz = - , minz = 0x3f3f3f3f;
for(int i=;i<Size;i++){
int to = G[u][i];
/*
请注意V,G交替领航,当前位置来说,下一个点是最大化还是最小化、
1——Max
0——Min
*/
if( cur ){
maxz = max( maxz , dfs(to,cur+) ) ;
}else{
minz = min( minz , dfs(to,cur+) ) ;
}
} /*
但是过程中的节点的权值都会被记录并返回到上面的for里面。 */
if( cur ) return dp[u][cur] = maxz + w[u] ;
else return dp[u][cur] = minz + w[u] ;
}
int main()
{
while(~scanf("%d%d%d",&n,&m,&f)){
Init();
for(int i=;i<=n;i++) scanf("%d",&w[i]);
for(int i=,u,v;i<=m;i++){
scanf("%d%d",&u,&v);
G[u].push_back(v);
du[v] ++ ;
}
/*
∵V先手领航
∴他的目标就是让自己的值最大化,使其大于等于f.
*/
int maxz = - ;
for(int i=;i<=n;i++){
//题目要求要从入度为0的节点开始.
if( !du[i] ){
maxz = max( maxz , dfs(i,) ) ;
}
}
if( maxz >= f ) puts("Victory");
else puts("Glory");
}
return ;
}
【记忆化搜索】Navy maneuvers的更多相关文章
- HDU2452 Navy maneuvers 记忆化搜索
这题目意思能忍?读了半年,乱七八糟的 记忆化搜索 拖拖的,dp[i][0]代表以获得最小值为目标的船以i为起点.dp[i][1]代表以获得最大值为目标的船以i为起点.接下来暴力枚举入度为0的点为起点, ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
- 【BZOJ-3895】取石子 记忆化搜索 + 博弈
3895: 取石子 Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 263 Solved: 127[Submit][Status][Discuss] D ...
- hdu3555 Bomb (记忆化搜索 数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Memory ...
- zoj 3644(dp + 记忆化搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...
- loj 1044(dp+记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...
- DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects
题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...
- HDU1978 记忆化搜索
How many ways Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- bzoj4562: [Haoi2016]食物链--记忆化搜索
这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞 题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路 从入读为零的点进行记忆化搜索,搜到出度为零的点返回1 所有 ...
随机推荐
- Python 串口通讯
摘要: pyserial module: https://github.com/tbusf/pyserial Python使用pyserial进行串口通信:http://blog.csdn.net/l ...
- No hash for parcel CDH-XXX.parcel.torrent
在安装 CDH 时,到 Install Parcels 这一步,分发 Parcels 一直过不去,界面一直报 Failure due to stall on seeded torrent,查看日志一直 ...
- Elasticsearch 部署以及报错解决
前言 Elasticsearch 是一个非常值得学习和使用的分布式存储 此次部署将采用 centos6.9 一.初步了解 ES 简谈概念 Elasticsearch 是一个开源的高扩展的分布式全文检索 ...
- tkinter入门-按钮的基本属性
1. 尺寸的大小 ipadx 和 ipady import tkinter root = tkinter.Tk() root.minsize(500, 500) # 基本属性 # 按钮组件 # 绝 ...
- 映射器Mapping
1) org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping(核心) 将程序员定义的Action所对应的<bean& ...
- 部署k8s时容器中ping不通
192.168.42.120 | UNREACHABLE! => { "changed": false, "msg": "Fail ...
- 关于XMind软件文件格式的一些思考
1,安装XMind软件,看见可以导入Markdown文件 2,因此新建了测试.md文件,代码格式为左图,显示效果为右图. 3,导入到XMind中显示为下图 4,也就是XMind中子标题对应着Markd ...
- k8s 网络模型解析之实践
一. 实践说明 首先我们先创建一组资源,包括一个deployment和一个service apiVersion: apps/v1 kind: Deployment metadata: name: ng ...
- HTML5 DOM 新增数据类型
HTML5 DOM 新增数据类型 前言 相对于HTML4当中的DOM,在HTML5中的DOM,新增了很多复杂数据类型,为实际的应用提供了便捷的操作. 在HTML5 DOM中,新增了如下的内容: HTM ...
- k8s 1.15.2 部署
目录 一.环境准备 二.软件安装 三.部署master节点 四.部署node节点 五.集群状态检测 一.环境准备 IP地址 节点角色 CPU Memory Hostname Docker versio ...