【记忆化搜索】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 所有 ...
随机推荐
- Vue 使用百度地图组件
npm 安装 npm install vue-baidu-map --save组件官网地址 https://dafrok.github.io/vue-baidu-map/#/
- MyBatis动态Sql 的使用
Mapper.xml提示: 1:mapper包中新建一个文件:mybatis-3-mapper.dtd 2:在web app libraries/mybatis.jar/org.apache.ibat ...
- PySpider的安装
使用 Pip 安装,命令如下 pip install pyspider 命令执行完毕即可安装成功. 常见错误: Windows 下可能会出现这样的错误提示:Command "python s ...
- Linux设备驱动程序 之 模块参数
模块支持参数的方法 内核允许驱动程序指定参数,这些参数可在运行insmod或者modprobe命令装载模块时赋值,modprobe还可以从它的配置文件(/etc/modporb.conf)中读取参数值 ...
- LeetCode 44. 通配符匹配(Wildcard Matching)
题目描述 给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配. '?' 可以匹配任何单个字符. '*' 可以匹配任意字符串(包括空字符串). 两个字符串完 ...
- (转载)完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三
转自:http://blog.csdn.net/piggyxp/article/details/6922277 前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何 ...
- 汽车辐射监测系统-Qt开发[转]发
功能介绍: 利用在路边的两个探测器,探测汽车的辐射剂量,通过电子板进行数据采集,并串口传输到计算机,实时显示.可以保存采集数据,进行独立显示. 开发环境: VS2008,Qt4.7, QWT 6.0. ...
- Mac配置jdk以及maven
一 Mac配置JDK和Maven 1.安装成功jdk后 2.打开终端后,输入vim ~/.bash_profile 3.输入: export MAVEN_HOME=/usr/local/maven/a ...
- python中requests.session的妙用
在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 1.requests库的session对象能够帮我们跨请求保持某些参数,也会在 ...
- Rancher-k8s加速安装文档
Kubernetes是一个强大的容器编排工具,帮助用户在可伸缩性系统上可靠部署和运行容器化应用.Rancher容器管理平台原生支持K8s,使用户可以简单轻松地部署K8s集群. 很多同学正常部署k8s环 ...