思路:先把最左和最右的干掉,剩下的再一起dfs。dfs的时候注意当第cur-1个死了之后(而第cur个不要求必须死)才向后面搜索第cur+1个。

当前的第cur个可以被扔在自己身上的火球,也可被扔在第cur+1个的火球干掉。

 1 #include <iostream>
 2 #include <queue>
 3 #include <stack>
 4 #include <cstdio>
 5 #include <vector>
 6 #include <map>
 7 #include <set>
 8 #include <bitset>
 9 #include <algorithm>
10 #include <cmath>
11 #include <cstring>
12 #include <cstdlib>
13 #include <string>
14 #include <sstream>
15 #include <time.h>
16 #define x first
17 #define y second
18 #define pb push_back
19 #define mp make_pair
20 #define lson l,m,rt*2
21 #define rson m+1,r,rt*2+1
22 #define mt(A,B) memset(A,B,sizeof(A))
23 #define mod 1000000007
24 using namespace std;
25 typedef long long LL;
26 const int N=2e5+10;
27 const int inf = 0x3f3f3f3f;
28 const LL INF=0x3f3f3f3f3f3f3f3fLL;
29 int x[N];
30 int n,a,b,ans,res_2=inf;
31
32
33 void dfs(int cur,int num)
34 {
35     int p=0,q;
36     if(cur==n-1)
37     {
38         ans=min(ans,num);
39         return;
40     }
41     if(x[cur-1]<0)dfs(cur+1,num);
42
43     if(x[cur-1]>=0)
44     {
45         p=x[cur-1]/b+1;
46         x[cur-1]-=p*b;
47         x[cur]-=p*a;
48         x[cur+1]-=p*b;
49         dfs(cur+1,num+p);
50         x[cur-1]+=p*b;
51         x[cur]+=p*a;
52         x[cur+1]+=p*b;
53     }
54     q=x[cur]/a+1;
55     if(x[cur]>=0&&q>p)
56     {
57         for(int i=p+1;i<=q;i++)
58         {
59             x[cur-1]-=i*b;
60             x[cur]-=i*a;
61             x[cur+1]-=i*b;
62             dfs(cur+1,num+i);
63             x[cur]+=i*a;
64             x[cur+1]+=i*b;
65             x[cur-1]+=i*b;
66         }
67     }
68 }
69 int main()
70 {
71 #ifdef Local
72     freopen("data.txt","r",stdin);
73 #endif
74     int p=0,q=0;
75     cin>>n>>a>>b;
76     ans=inf;
77     for(int i=0; i<n; i++)scanf("%d",&x[i]);
78     p=x[0]/b+1;
79     x[0]-=p*b;;
80     x[1]-=p*a;
81     x[2]-=p*b;
82     if(x[n-1]>=0)
83     {
84         q=x[n-1]/b+1;
85         x[n-2]-=q*a;
86         x[n-3]-=q*b;
87         x[n-1]-=q*b;
88     }
89     dfs(1,0);
90     if(ans==inf)ans=0;
91     cout<<ans+p+q<<endl;
92 #ifdef Local
93     cerr << "time: " << (LL) clock() * 1000 / CLOCKS_PER_SEC << " ms" << endl;
94 #endif
95 }

View Code

转载于:https://www.cnblogs.com/27sx/p/6266128.html

1489 蜥蜴和地下室相关推荐

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

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

  2. 51nod 1489 蜥蜴和地下室

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

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

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

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

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

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

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

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

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

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

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

  8. CF6D--Lizards and Basements 2译文

    原题链接-- https://acs.jxnu.edu.cn/problem/CF6Dhttps://acs.jxnu.edu.cn/problem/CF6D Lizards and Basement ...

  9. 02.14 Lizards and Basements 2

    Lizards and Basements 2 | JXNUOJ 描述: This is simplified version of the problem used on the original ...

最新文章

  1. RHEL6新特性之联网和服务
  2. cocos2d-x 打包成so文件之后,假设出现错误,能够使用ndk-stack来查看里面的异常...
  3. java最后一个注解@SuppressWarnings
  4. 集成运放组成的电压比较器
  5. 【一张图系列】理解安全上下文
  6. SQL按照年月员工状态统计出勤情况
  7. python字典速度能比字典高多少_python – 字典访问速度比较与整数键对字符串键...
  8. shell 相关知识(1)
  9. 【BZOJ3196】【Tyvj1730】二逼平衡树,第一次的树套树(线段树+splay)
  10. C Primer Plus (第6版) 读书笔记_Chapter 1
  11. Android应用程序线程消息循环模型分析(5)
  12. 只要掌握了这条法则,你就有赚不完的钱
  13. Excel 将换行符替换为空
  14. 6.Composer实现PHP中类的自动加载
  15. 【迁移学习】算法之TrAdaBoost
  16. 数据结构实验1-线性表的顺序实现
  17. java火星坐标转百度坐标_各种地理坐标系的转换,火星坐标,百度坐标,wsg84等...
  18. 网络重置后网络适配器丢失和网络适配器前面是黄色叹号怎么办?
  19. C# 实现支持markdown语法编辑器
  20. 关于手写unshift方法

热门文章

  1. linux git文件图标,分享|三款 Linux 下的 Git 图形客户端
  2. [javascript] Date 时间精确到天
  3. 零拷贝和java NIO
  4. Hadoop学习(source方式安装篇)
  5. readfile读取串口数据_西门子PLC-1200-串口Modbus RTU通讯实例
  6. java如何读取下拉列表的值_java - 如何在Selenium 2中选择/获取下拉选项
  7. python struct模块_python struct 模块
  8. linux socket读写函数,Linux网络编程入门
  9. mysql 自带 数据库_mysql自带的4个数据库介绍
  10. sql server agent会自动关闭_经常用微信支付,要关闭这个开关,不然每个月都会自动扣钱...