51nod 1489 蜥蜴和地下室
哈利喜欢玩角色扮演的电脑游戏《蜥蜴和地下室》。此时,他正在扮演一个魔术师。在最后一关,他必须和一排的弓箭手战斗。他唯一能消灭他们的办法是一个火球咒语。如果哈利用他的火球咒语攻击第i个弓箭手(他们从左到右标记),这个弓箭手会失去a点生命值。同时,这个咒语使与第i个弓箭手左右相邻的弓箭手(如果存在)分别失去b(1 ≤ b < a ≤ 10)点生命值。
因为两个端点的弓箭手(即标记为1和n的弓箭手)与你相隔较远,所以火球不能直接攻击他们。但是哈利能用他的火球攻击其他任何弓箭手。
每个弓箭手的生命值都已知。当一个弓箭手的生命值小于0时,这个弓箭手会死亡。请求出哈利杀死所有的敌人所需使用的最少的火球数。
如果弓箭手已经死亡,哈利仍旧可以将他的火球扔向这个弓箭手。
- 第一行包含3个整数 n, a, b (3 ≤ n ≤ 10; 1 ≤ b < a ≤ 10),第二行包含n个整数——h1,h2,...,hn (1 ≤ hi ≤ 15), hi 是第i个弓箭手所拥有的生命力。
- 以一行输出t——所需要的最少的火球数。
- 3 2 1
- 2 2 2
- 3
- #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 蜥蜴和地下室的更多相关文章
- 51nod 1489 蜥蜴和地下室(dp)
传送门 题意 分析 dp[12][20][20][20]; // dp[a][b][c][d]第a个弓箭手面临第a-1.a.a+1个弓箭手的生命值分别为b.c.d的状态 转移巧妙,需注意 trick ...
- 51Nod 蜥蜴和地下室(搜索)
哈利喜欢玩角色扮演的电脑游戏<蜥蜴和地下室>.此时,他正在扮演一个魔术师.在最后一关,他必须和一排的弓箭手战斗.他唯一能消灭他们的办法是一个火球咒语.如果哈利用他的火球咒语攻击第i个弓箭手 ...
- 51nod蜥蜴与地下室(1498)(暴力搜索)
题意:一个数组s,再给你a,b值,除了s1和sn外,你可以攻击其他元素,你对这个元素的伤害为a,那么他两边的元素会受到b的牵连伤害,si-a,si-1-b,si+1-b: 求最小的次数,使得这个数组的 ...
- 【51Nod 1244】莫比乌斯函数之和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...
- 1066: [SCOI2007]蜥蜴
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3545 Solved: 1771[Submit][Status] ...
- 51Nod 1268 和为K的组合
51Nod 1268 和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...
- 51Nod 1428 活动安排问题
51Nod 1428 活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...
- 51Nod 1278 相离的圆
51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...
- 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...
随机推荐
- nodejs写文件
var fs = require('fs'); 2 var txt = "以上程序使用fs.readFileSync从源路径读取文件内容,并使用fs.writeFileSync将文件内容写入 ...
- POJ-3616
Milking Time Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10434 Accepted: 4378 Des ...
- IOSerialize,xml和json,soap序列化器,二进制序列化器,XML序列化器,文件 检查、新增、复制、移动、删除
1 文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件3 三种序列化器4 xml和json1.文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/ ...
- Oracle判断某个表是否存在的方法
在SQL中,我们常常使用if exists来判断一个表或某个对象是否存在,例如: IF EXISTS (SELECT * FROM sys.tables WHERE name = 'CODE_BMD ...
- SP2-0734: 未知的命令开头 “IMP ” - 忽略了剩余的行
描述 在cmd命令窗口中使用imp命令将dmp文件导入到oracle中时,出现了错误: SP2-0734: 未知的命令开头 “IMP ” - 忽略了剩余的行,如图 原因 imp命令是oracle提供的 ...
- cogs 2691. Sumdiv
2691. Sumdiv ★★★ 输入文件:sumdiv.in 输出文件:sumdiv.out 简单对比时间限制:1 s 内存限制:12 MB [题目描述] 考虑两个自然数A和B.定义 ...
- Spring Cloud与Duddo比较(非原创)
文章大纲 一.Spring Cloud与Duddo背景介绍二.Spring Cloud与Duddo比较三.参考文章 一.Spring Cloud与Duddo背景介绍 国内技术人员喜欢拿 Dub ...
- easyui datagrid编辑时编辑框自动获取焦点
onDblClickCell:function(rowIndex, field, val){//双击单元格监听器 $(this).datagrid('beginEdit',rowIndex);//开启 ...
- Python面向对象之单例模式
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某 一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就 能派上用场. 单例 ...
- QDU-GZS and String
Description GZS has two strings s and t. In each step, GZS can select arbitrary character c of s and ...