D. Lizards and Basements 2
time limit per test

2 seconds

memory limit per test

64 megabytes

input

standard input

output

standard output

This is simplified version of the problem used on the original contest. The original problem seems to have too difiicult solution. The constraints for input data have been reduced.

Polycarp likes to play computer role-playing game «Lizards and Basements». At the moment he is playing it as a magician. At one of the last levels he has to fight the line of archers. The only spell with which he can damage them is a fire ball. If Polycarp hits the i-th archer with his fire ball (they are numbered from left to right), the archer loses a health points. At the same time the spell damages the archers adjacent to the i-th (if any) — they lose b (1 ≤ b < a ≤ 10) health points each.

As the extreme archers (i.e. archers numbered 1 and n) are very far, the fire ball cannot reach them. Polycarp can hit any other archer with his fire ball.

The amount of health points for each archer is known. An archer will be killed when this amount is less than 0. What is the minimum amount of spells Polycarp can use to kill all the enemies?

Polycarp can throw his fire ball into an archer if the latter is already killed.

Input

The first line of the input contains three integers n, a, b (3 ≤ n ≤ 10; 1 ≤ b < a ≤ 10). The second line contains a sequence of n integers — h1, h2, ..., hn (1 ≤ hi ≤ 15), where hi is the amount of health points the i-th archer has.

Output

In the first line print t — the required minimum amount of fire balls.

In the second line print t numbers — indexes of the archers that Polycarp should hit to kill all the archers in t shots. All these numbers should be between 2 and n - 1. Separate numbers with spaces. If there are several solutions, output any of them. Print numbers in any order.

Examples
input
3 2 1
2 2 2
output
3
2 2 2
input
4 3 1
1 4 1 1
output
4
2 2 3 3

(万万没想到啊,这题竟然可以用深搜。。我满脑子想的都是纯暴力,又是一道看了题解才恍然大悟的题

题意:n个人站成一排,发火球攻击,选择攻击的人受到a点伤害,其相邻的人受到b点伤害,目的是让所有人的血量都小于0,求最小攻击次数。
解题思路:因为火球只能攻击2-n-1,所以搜索的判断条件是前一个人的血量得小于0,结束条件是n的血量小于0。其实知道是搜索后,就挺好想的了

我的ac代码:
 1 #include <iostream>
2 #include <cstdio>
3 #include <map>
4 using namespace std;
5 const int maxn = 22222;
6 int nu[maxn],ans=0x3f3f3f3f;
7 int res[maxn],num[maxn];
8
9 int n,a,b,len=0;
10 void dfs(int x,int c) {
11 if(c>=ans) return ;
12 if(x==n) {
13 if(nu[x]<0){
14 ans=c;
15 for(int k=0;k<ans;++k) {
16 res[k]=num[k];
17 }
18 }
19 return ;
20 }
21 for(int j=0;j<=max(nu[x-1]/b+1,max(nu[x]/b+1,nu[x+1]/b+1));++j) {
22 if(nu[x-1]<b*j) {
23 nu[x-1]-=b*j;
24 nu[x]-=a*j;
25 nu[x+1]-=b*j;
26 for(int k=0;k<j;++k) {
27 num[len++]=x;
28 // cout<<i<<endl;
29 }
30 dfs(x+1,c+j);
31 len-=j;
32 nu[x-1]+=b*j;
33 nu[x]+=a*j;
34 nu[x+1]+=b*j;
35 }
36 }
37
38 }
39 int main() {
40 ios::sync_with_stdio(false);
41 cin.tie(0);cout.tie(0);
42 cin>>n>>a>>b;
43 for(int i=1;i<=n;++i) {
44 cin>>nu[i];
45 }
46 dfs(2,0);
47 cout<<ans<<endl;
48 for(int i=0;i<ans;++i) cout<<res[i]<<" ";
49 return 0;
50 }

高手ac代码:(vector真是好啊

 1 #include<bits/stdc++.h>
2 using namespace std;
3 int ans=9999999;
4 int h[100];
5 int a,b,n;
6 vector<int>V;
7 vector<int>V2;
8 void dfs(int x,int times)
9 {
10 if(times>=ans)return;
11 if(x==n)
12 {
13 if(h[x]<0){
14 V2=V;
15 ans=times;
16 }
17 return ;
18 }
19 for(int i=0; i <= max( h[x-1]/b+1,max( h[x]/a+1, h[x+1]/b+1) );i++)
20 {
21 if(h[x-1]<b*i)
22 {
23 h[x-1] -= b*i;
24 h[x] -= a*i;
25 h[x+1] -= b*i;
26 for(int j=0;j<i;j++) V.push_back(x);
27 dfs(x+1,times+i);
28 for(int j=0;j<i;j++) V.pop_back();
29 h[x-1] += b*i;
30 h[x] += a*i;
31 h[x+1] += b*i;
32 }
33 }
34 }
35 int main()
36 {
37 cin>>n>>a>>b;
38 for(int i=1;i<=n;i++)cin>>h[i];
39 dfs(2,0);
40 cout<<ans<<endl;
41 for(int i=0;i<V2.size();i++)cout<<V2[i]<<" ";
42 cout<<endl;
43 return 0;
44 }

codeforces 6D的更多相关文章

  1. Codeforces 6D Lizards and Basements 2 dfs+暴力

    题目链接:点击打开链接 #include<stdio.h> #include<iostream> #include<string.h> #include<se ...

  2. Codeforces Global Round 6D(VECTOR<ARRAY<INT,3> >)

    一个人只要存在债务关系,那么他的债务可以和这整个债务关系网中任何人连边,和他当初借出或欠下的人没有关系.只需要记录他的债务值即可. #define HAVE_STRUCT_TIMESPEC #incl ...

  3. Codeforces Round #509 (Div. 2) F. Ray in the tube(思维)

    题目链接:http://codeforces.com/contest/1041/problem/F 题意:给出一根无限长的管子,在二维坐标上表示为y1 <= y <= y2,其中 y1 上 ...

  4. Codeforces 1375F - Integer Game(交互)

    Codeforces 题面传送门 & 洛谷题面传送门 一个奇怪的做法. 首先我们猜测答案总是 First.考虑什么样的情况能够一步把对方一步干掉.方便起见我们假设 \(a<b<c\ ...

  5. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  6. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  7. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  8. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  9. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

随机推荐

  1. CMU数据库(15-445)Lab1-BufferPoolManager

    0. 关于环境搭建请看 https://www.cnblogs.com/JayL-zxl/p/14307260.html 1. Task1 LRU REPLACEMENT POLICY 0. 任务描述 ...

  2. DC-DC变换器,24v转5v稳压芯片,3A输出电流

    在24V输入中,比较合适的LDO可以选择:PW6206,输出电压3V,3.3V,5V 输入电压最高40V,功耗也低4uA左右,采用SOT23-3封装. PW6206系列是一个高精度,高输入电压低静态电 ...

  3. 日常分享:关于时间复杂度和空间复杂度的一些优化心得分享(C#)

    前言 今天分享一下日常工作中遇到的性能问题和解决方案,比较零碎,后续会持续更新(运行环境为.net core 3.1) 本次分享的案例都是由实际生产而来,经过简化后作为举例 Part 1(作为简单数据 ...

  4. 在HTML中改变input标签中的内容

    在HTML中改变input标签的内容 1.使用js自带的方法: document.getElementById('roadName').value='武汉路';//通过标签选择器来选择标签,然后设置值 ...

  5. PE节表

  6. git 分支合并时如何忽略某个文件

    [转]git 分支合并时如何忽略某个文件 - 神奇的旋风 - 博客园 https://www.cnblogs.com/xuan52rock/p/13268872.html Git - git-merg ...

  7. FridaHook框架学习(2)

    FridaHook框架学习(2) 前言 学习过程参考https://bbs.pediy.com/thread-227233.htm. 逆向分析 安装并运行例子程序,可以看到这个例子是一个验证注册码的程 ...

  8. hadoop的Namenode HA原理详解

    为什么要Namenode HA? 1. NameNode High Availability即高可用. 2. NameNode 很重要,挂掉会导致存储停止服务,无法进行数据的读写,基于此NameNod ...

  9. liux 常用操作命令

    tail -f /home/jyapp/apache-tomcat-7.0.59/logs/catalina.out  //查看实施日志 //删除临时目录并且启动服务器 rm -rf /home/jy ...

  10. JavaWeb-tomcat安装(Unsupported major.minor version 51.0/startup.bat闪退)

    JavaWeb-tomcat安装(Unsupported major.minor version 51.0) 一 启动startup.bat 出错i 今天安装tomcat出错,折腾了一下午,收获了许多 ...