哈利喜欢玩角色扮演的电脑游戏《蜥蜴和地下室》。此时,他正在扮演一个魔术师。在最后一关,他必须和一排的弓箭手战斗。他唯一能消灭他们的办法是一个火球咒语。如果哈利用他的火球咒语攻击第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端点变为0是已知的,中间搜索时就是每次确定当前搜索的点的前一个点生命值为负数
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
typedef long long ll;
int n,a,b,h[15],ans=0,pos=0,cnt=INF;
void dfs(int now,int value)
{if(now==n){cnt=min(cnt,value);return ;}int x=0,y=0;if(h[now-1]<0) dfs(now+1,value);else{x=h[now-1]/b+1;h[now-1]-=b*x;h[now]-=a*x;h[now+1]-=b*x;dfs(now+1,value+x);h[now-1]+=b*x;h[now]+=a*x;h[now+1]+=b*x;}y=h[now]/a+1;if(h[now]>=0 && y>x){for(int i=x+1;i<=y;i++){h[now-1]-=b*i;h[now]-=a*i;h[now+1]-=b*i;dfs(now+1,value+i);h[now-1]+=b*i;h[now]+=a*i;h[now+1]+=b*i;}}
}
int main()
{scanf("%d%d%d",&n,&a,&b);for(int i=1;i<=n;i++)scanf("%d",&h[i]);ans=h[1]/b+1;h[1]-=b*ans;h[2]-=a*ans;h[3]-=b*ans;if(h[n]>=0){pos=h[n]/b+1;h[n]-=b*pos;h[n-1]-=a*pos;h[n-2]-=b*pos;}dfs(2,0);if(cnt==INF) printf("%d\n",ans+pos);else printf("%d\n",ans+pos+cnt);return 0;
}

转载于:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/8975644.html

51Nod 蜥蜴和地下室(搜索)相关推荐

  1. 51nod 1489 蜥蜴和地下室

    题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 哈利喜欢玩角色扮演的电脑游戏<蜥蜴和地下室>.此时,他正在扮演一个魔术 ...

  2. 51nod oj 1489 蜥蜴和地下室【dfs】

    1489 蜥蜴和地下室 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 哈利喜欢玩角色扮演的电脑游戏<蜥蜴和 ...

  3. 蜥蜴与地下室(51Nod-1489)

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

  4. 蜥蜴和地下室(深搜)

    个人心得:心态炸了,玩了10天的国庆来,感觉脑子太短路了,好不容易理清思路,就是先将俩边的打死,然后中间的就只能将左边的杀死才能继续深搜, 但此时如果还大于0,就有俩种选择就是直接打死或者借助右边的打 ...

  5. 1489 蜥蜴和地下室

    思路:先把最左和最右的干掉,剩下的再一起dfs.dfs的时候注意当第cur-1个死了之后(而第cur个不要求必须死)才向后面搜索第cur+1个. 当前的第cur个可以被扔在自己身上的火球,也可被扔在第 ...

  6. 宝石猎人 51Nod - 1455 记忆化搜索

    苏塞克岛是一个有着30001个小岛的群岛,这些小岛沿着一条直线均匀间隔分布,从西到东编号为0到30000.众所周知,这些岛上有很多宝石,在苏塞克岛上总共有n颗宝石,并且第i颗宝石位于岛 pi上. 小法 ...

  7. 搜索 —— 深度优先搜索(DFS)

    [概述] 深度优先搜索,是从初始状态起,利用一定的规则生成搜索树,寻找下一层任一个结点,检查是否出现目标状态,若未出现,以此状态利用规则生成再下一层任一个结点,再检查,重复过程一直到叶节点(即不能再生 ...

  8. 【POJ】2676-Sudoku 【51Nod】1211-数独(DFS)

    [POJ]2676-Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25200 Accepted: 11782 Sp ...

  9. 华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

    "Linux ?它比 Windows更好吗?我能用它打魔兽吗?" "咳!别提了,它操作起来特别麻烦,你得不停地敲击键盘.没准它还会趁你不注意的时候在你的手指头上咬一口呢! ...

最新文章

  1. PNAS-2018-多年多点5千样本鉴定玉米根际可遗传微生物
  2. 【译】①JWS之Java[tm] Web Start开发者指南目录
  3. 移动、联通、电信7模4G全网通
  4. caffe matlab 提取全链接层特zheng
  5. node.js web框架_使用Node.js进行Web爬取的终极指南
  6. NoSQL数据存储引擎
  7. java 根据星期计算日期_Java 根据指定日期计算所在周的周一和周日
  8. Java中数字朝着0.5的倍数取舍
  9. OpenGL Assimp的骨骼动画
  10. c语言实现二阶行列式计算,新手作品:行列式计算C语言版
  11. [QT]The inferior stopped because it received a signal from the operating system 自己解决方法
  12. phpcms v9 栏目伪静态完全自定义为栏目英文目录名
  13. 软件测试实习生 带人计划 Plan for Training Inten
  14. [合规性检查方法-Fitness3】基于足迹矩阵的拟合度评估方法
  15. C语言:模拟用户登录
  16. phonegap 修改app的名称
  17. 聊聊我在第三方支付公司的经历
  18. python 逻辑回归,预测银行客户是否购买定期存款
  19. 上海2015毕业生薪资水平
  20. 计算机科学和技术工学理学,计算机科学与技术是属于工学类还是理学类?

热门文章

  1. 计算机软件技能高考好考么,湖北技能高考:上不了本科,优先考虑这4所一档高职...
  2. linux 后台计算,科学网-如何在Linux中做批处理和后台计算-张彦的博文
  3. oracle日常函数应用,oracle日常 常用函数与脚本
  4. CURL HTTPS POST
  5. 卡尔曼滤波器(Kalman Filter) 理解
  6. 如何设置Jupiter Notebook服务器并从任何地方访问它(Windows 10)
  7. 数据结构栈和队列_使您的列表更上一层楼:链接列表和队列数据结构
  8. 如何成为数据科学家_成为数据科学家的5大理由
  9. 电商迅猛发展是利大于弊,还是弊大于利?
  10. 乱查征信,贷款不想要了吗?