题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题

哈利喜欢玩角色扮演的电脑游戏《蜥蜴和地下室》。此时,他正在扮演一个魔术师。在最后一关,他必须和一排的弓箭手战斗。他唯一能消灭他们的办法是一个火球咒语。如果哈利用他的火球咒语攻击第i个弓箭手(他们从左到右标记),这个弓箭手会失去a点生命值。同时,这个咒语使与第i个弓箭手左右相邻的弓箭手(如果存在)分别失去b(1 ≤ b < a ≤ 10)点生命值。

因为两个端点的弓箭手(即标记为1和n的弓箭手)与你相隔较远,所以火球不能直接攻击他们。但是哈利能用他的火球攻击其他任何弓箭手。

每个弓箭手的生命值都已知。当一个弓箭手的生命值小于0时,这个弓箭手会死亡。请求出哈利杀死所有的敌人所需使用的最少的火球数。

如果弓箭手已经死亡,哈利仍旧可以将他的火球扔向这个弓箭手。

Input
第一行包含3个整数 n, a, b (3 ≤ n ≤ 10; 1 ≤ b < a ≤ 10),第二行包含n个整数——h1,h2,...,hn (1 ≤ hi ≤ 15), hi 是第i个弓箭手所拥有的生命力。
Output
以一行输出t——所需要的最少的火球数。
Input示例
3 2 1
2 2 2
Output示例
3
 
 
思路:dfs之前先把1和n炸死
而且尽量不炸死
可以通过炸2或n-1把他们炸死 这样可以保证使用次数最少
有种情况:假如打爆x-1后x还活着,则说明x的血量大于x-1 因此要打爆x,此时打爆x有两种方法,就是直接打爆和通过打爆x+1来打爆x
搜索题
怀疑人生。。
#include <cstdio>
#define N 15
int n,a,b,h[N],ans=0x7fffffff;
void dfs(int pos,int sum)
{
if(sum>ans) return;
if(pos==n) {ans=sum;return;}
if(h[pos-]<) dfs(pos+,sum);
int v=;
if(h[pos-]>=)
{
v=h[pos-]/b+;
h[pos-]-=v*b;
h[pos]-=v*a;
h[pos+]-=v*b;
dfs(pos+,v+sum);
h[pos-]+=v*b;
h[pos]+=v*a;
h[pos+]+=v*b;
}
int vv=h[pos]/a+;
if(h[pos]>=&&vv>v)
{
for(int i=v+;i<=vv;++i)
{
h[pos-]-=b*i;
h[pos]-=a*i;
h[pos+]-=b*i;
dfs(pos+,sum+i);
h[pos-]+=b*i;
h[pos]+=a*i;
h[pos+]+=b*i;
}
}
return ;
}
int Main()
{
scanf("%d%d%d",&n,&a,&b);
for(int i=;i<=n;++i) scanf("%d",&h[i]);
int ans1,v=h[]/b+;
ans1=v;
h[]-=v*b;
h[]-=v*a;
h[]-=v*b;
if(h[n]>=)
{
v=h[n]/b+;
h[n]-=v*b;
h[n-]-=v*a;
h[n-]-=v*b;
ans1+=v;
}
dfs(,);
if(ans==0x7fffffff) ans=;
printf("%d\n",ans1+ans);
return ;
}
int sb=Main();
int main(int argc,char *argv[]){;}

51nod 1489 蜥蜴和地下室的更多相关文章

  1. 51nod 1489 蜥蜴和地下室(dp)

    传送门 题意 分析 dp[12][20][20][20]; // dp[a][b][c][d]第a个弓箭手面临第a-1.a.a+1个弓箭手的生命值分别为b.c.d的状态 转移巧妙,需注意 trick ...

  2. 51Nod 蜥蜴和地下室(搜索)

    哈利喜欢玩角色扮演的电脑游戏<蜥蜴和地下室>.此时,他正在扮演一个魔术师.在最后一关,他必须和一排的弓箭手战斗.他唯一能消灭他们的办法是一个火球咒语.如果哈利用他的火球咒语攻击第i个弓箭手 ...

  3. 51nod蜥蜴与地下室(1498)(暴力搜索)

    题意:一个数组s,再给你a,b值,除了s1和sn外,你可以攻击其他元素,你对这个元素的伤害为a,那么他两边的元素会受到b的牵连伤害,si-a,si-1-b,si+1-b: 求最小的次数,使得这个数组的 ...

  4. 【51Nod 1244】莫比乌斯函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...

  5. 1066: [SCOI2007]蜥蜴

    1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3545  Solved: 1771[Submit][Status] ...

  6. 51Nod 1268 和为K的组合

    51Nod  1268  和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...

  7. 51Nod 1428 活动安排问题

    51Nod   1428  活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...

  8. 51Nod 1278 相离的圆

    51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...

  9. 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...

随机推荐

  1. struts2的method=&quot;{1}&quot;

    这里的{1}表示接收前面action里通过通配符传来的值,例如你配置的是 ,然后调用***/editCrud.action,则method里获得的值是edit,将会调用这个action里面的 edit ...

  2. 2-7 Flutter开发工具使用指南

    这里选择用哪个模拟器运行 Mac系统下可以通过这个Open IOS Siumlator打开IOS模拟器 debug用来调试的 可以创建新的模拟器 选择安卓模拟器的版本 这是sdk的配置 点开就是打开了 ...

  3. JavaScript代码放在HTML代码不同位置的差别

    通常情况下,JavaScript 代码是和 HTML 代码一起使用的,可以将 JavaScript 代码放置在 HTML 文档的任何地方.但放置的地方,会对 JavaScript 代码的正常执行会有一 ...

  4. GitBook 入门学习

    一.什么是 Gitbook GitBook 是一个基于 Node.js 的命令行工具,支持 Markdown 和 AsciiDoc 两种语法格式,可以输出 HTML.PDF.eBook 等格式的电子书 ...

  5. MVC+Linq+EF笔记

    using (DataContext ctx = new DataContext()) { /*foreach (var item in ctx.employees) { ViewData[" ...

  6. MS SQL JSON类型type

    在MS SQL Server 2016,已经支持JSON处理. 执行下面代码,将获取ms sql server对象类型以及其说明: IF OBJECT_ID('tempdb.dbo.#json_typ ...

  7. 文档公式编辑神器-Snip

    最近在重新学习统计学的一些基础知识,整理笔记的时候需要输入一些数学公式.从学校毕业之后,就没有在文档中插入过公式了.按照以前的经验,我把输入公式的方式分成两类. 所见即所得的方式,常见的就是微软wor ...

  8. 根据rowid删除最新数据(rowid最大为最新数据)(转)

    https://blog.csdn.net/liuyuehui110/article/details/43524379

  9. [UE4]Component相关常用API

    http://www.dawnarc.com/2017/02/ue4component%E7%9B%B8%E5%85%B3%E5%B8%B8%E7%94%A8api/ Actor.h //获取第一个与 ...

  10. codeforces494C Helping People【treedp+概率dp】

    区间不交叉,可以看出区间构成了树形结构,建出树之后,设f[u][i]为u这个区间最大值最多加i的概率,转移是\( f[u][i]=p[u]*\prod f[v][mxu-mxv-1]+(1-p[u]) ...