51nod1489(dfs)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1489
题意:中文题诶~
思路:dfs
首先我们要通过攻击第1个人和倒数第2个人来杀死第一个和最后一个人。
接下来我们考虑如何最高效的杀死中间的人:
假设当前我们正在攻击第pos个人,那么我们要保证第pos-1个人已死才能移向下一个人(这点很好理解,因为我们如果在攻击第pos个人以前没有杀死第pos-1个人,那么我们就无法杀死它)。不过我们还要再具体一点讨论这些情况:
1.如果我们在攻击第pos个人死,第pos个人已经死了,我们还没有杀死第pos-1个人,那么我们需要继续攻击第pos个人直至pos-1死亡(因为我们是用的dfs,所以不需要考虑返回去直接攻击第pos-1个人);
2.如果我们攻击第pos个人,pos还没死,pos-1已经死了,假设我们攻击cnt次杀死了pos-1,攻击cc次能杀死pos,那么我们需要遍历攻击cnt~cc次攻击后进入下一层递归的所有情况;
取得的最优解就是我们要的答案啦.....
代码:
#include <bits/stdc++.h>
#define MAXN 50
#define inf 0x3f3f3f3f
using namespace std; int gg[MAXN], ans=inf, n, a, b; void dfs(int pos, int num){
int cnt=, cc=; //***注意这里的cnt一定要赋初值,因为有可能满足(cc>cnt&&gg[pos]>=0)条件时不满足(gg[pos-1]>=0)条件
if(pos==n){ //***到达第n个人是返回并更新攻击次数
ans=min(ans, num);
return;
}
if(gg[pos-]<){ //***只有前一个人死了才能向后移动
dfs(pos+, num);
}
if(gg[pos-]>=){ //***只处理大于等于0的情况
cnt=gg[pos-]/b+;
gg[pos-]-=b*cnt;
gg[pos]-=a*cnt;
gg[pos+]-=b*cnt;
dfs(pos+, num+cnt);
gg[pos-]+=b*cnt; //***注意回溯时要将前面改变的量复原
gg[pos]+=a*cnt;
gg[pos+]+=b*cnt;
}
cc=gg[pos]/a+;
if(cc>cnt&&gg[pos]>=){ //***如果此时pos-1已死而pos还活着的话,我们可以选择直接将其杀死再移向下一个或者直接移向下一位
for(int i=cnt+; i<=cc; i++){
gg[pos-]-=b*i;
gg[pos]-=a*i;
gg[pos+]-=b*i;
dfs(pos+, num+i);
gg[pos-]+=b*i;
gg[pos]+=a*i;
gg[pos+]+=b*i;
}
}
return;
} int main(void){
int num=;
cin >> n >> a >> b;
for(int i=; i<=n; i++){
cin >> gg[i];
}
int cnt=gg[]/b+; //***先去头
num+=cnt;
gg[]-=b*cnt;
gg[]-=a*cnt;
gg[]-=b*cnt;
if(gg[n]>=){ //***去尾,注意如果只有三个人的话有可能gg[n]此时已经小于0了
cnt=gg[n]/b+;
num+=cnt;
gg[n-]-=b*cnt;
gg[n-]-=a*cnt;
gg[n]-=b*cnt;
}
dfs(, );
if(ans==inf){ //***注意有可能dfs直接满足条件退出了,此时ans值为inf
ans=;
}
cout << ans+num << endl;
return ;
}
51nod1489(dfs)的更多相关文章
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)
来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-1146】网络管理Network DFS序 + 带修主席树
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 3495 Solved: 1032[Submi ...
随机推荐
- 【Selenium】Option加载用户配置,Chrom命令行参数
about:version - 显示当前版本 about:memory - 显示本机浏览器内存使用状况 about:plugins - 显示已安装插件 about:histograms - 显示历史记 ...
- windows 里面waveOut*接口应用
#include <windows.h>#include <mmsystem.h>#include <stdio.h>/** some good values fo ...
- Selenium-键盘操作
在webdriver的Keys类中提供了键盘所有的按键操作,当然也包括一些常见的组合操作如Ctrl+A全选),Ctrl+C(复制),Ctrl+V(粘贴).更多参考官方文档对应的编码http://sel ...
- Python基础知识之字符串操作方法总结
Python 中字符串也是一种数据类型,针对此数据总结下常用的方法 1,字符串截取,变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾 ...
- kylin_学习_00_资源帖
一.官方资料 1.官方文档 kylin官方文档(中文) 2.kylin的安装 Hadoop 环境搭建 kylin安装向导 二.参考资料 1.分布式大数据多维分析(OLAP)引擎Apache Kylin ...
- Sqlite表结构读取工具,word批量转html,在线云剪贴板,文件批量提取工具;
工欲善其事必先利其器,本周为您推荐工具排行 Sqlite表结构读取工具,word批量转html,在线云剪贴板,文件批量提取工具: 本周我们又要发干货了,准备好接受了吗? 为什么是干货,就是因为 ...
- jqgrid--api,官网demo,编辑
api参考: http://blog.csdn.net/hurryjiang/article/details/7551477 官网demo: http://www.trirand.com/blog/j ...
- 洛谷【P1619】 解一元二次方程的烦恼
我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.luogu.org/problemnew/show/P16 ...
- 【转】 Pro Android学习笔记(五四):调试和分析(2):View层次结构
目录(?)[-] 帮助性能分析 帮助精简UI设计 对于模拟器上的应用(非真实设备),可以查看Hierarchy View,如下图: 帮助性能分析 当我们选择某个view时,我们可以看到measurin ...
- AI设计的若干规则阐述
转自:http://www.gameres.com/491742.html 一般来讲,网络游戏的AI历来就是很简单的AI.相比之下,很多单机游戏的AI就要得复杂一些.而笔者并未从事过大型单机游戏的AI ...