codeforces 6D
2 seconds
64 megabytes
standard input
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.
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.
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.
3 2 1
2 2 2
3
2 2 2
4 3 1
1 4 1 1
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的更多相关文章
- Codeforces 6D Lizards and Basements 2 dfs+暴力
题目链接:点击打开链接 #include<stdio.h> #include<iostream> #include<string.h> #include<se ...
- Codeforces Global Round 6D(VECTOR<ARRAY<INT,3> >)
一个人只要存在债务关系,那么他的债务可以和这整个债务关系网中任何人连边,和他当初借出或欠下的人没有关系.只需要记录他的债务值即可. #define HAVE_STRUCT_TIMESPEC #incl ...
- Codeforces Round #509 (Div. 2) F. Ray in the tube(思维)
题目链接:http://codeforces.com/contest/1041/problem/F 题意:给出一根无限长的管子,在二维坐标上表示为y1 <= y <= y2,其中 y1 上 ...
- Codeforces 1375F - Integer Game(交互)
Codeforces 题面传送门 & 洛谷题面传送门 一个奇怪的做法. 首先我们猜测答案总是 First.考虑什么样的情况能够一步把对方一步干掉.方便起见我们假设 \(a<b<c\ ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
随机推荐
- 命名秘籍周获近五千星——GitHub 热点速览 v.21.04
作者:HelloGitHub-小鱼干 命名一直是编程界的难点,这次 naming-cheatsheet 就能帮上你的忙.按照它的 SID(Short..Intuitive.Descriptive)原则 ...
- Python攻城——查看,生成幫助文檔
1. python在控制台中查看文檔 1 python -m pydoc 模塊名 2. pydoc生成HTML文檔 1 python -m pydoc -w 模塊名 1 python -m pydoc ...
- JMeter去掉启动的cmd命令窗口和制作快捷方式
1.去掉启动的cmd命令窗口 在使用jmeter时,如果使用默认的jmeter.bat启动的话,会出现一个CMD命令窗口,之后才会启动jmeter工作界面: 如果直接启用ApacheJMeter.ja ...
- (12)-Python3之--openpyxl模块
1.安装 pip install openpyxl 2.Excel操作的流程 1.打开excel,进入工作薄 workbook2.选择表单 Sheet 3.单元格 Cell4.读写操作 3.Exce ...
- 逻辑bug 测试用例
1. 179. 最大数 - 力扣(LeetCode) https://leetcode-cn.com/problems/largest-number/ 给定一组非负整数 nums,重新排列它们每个数字 ...
- 【实战】ZooKeeper 实战
1. 前言 这篇文章简单给演示一下 ZooKeeper 常见命令的使用以及 ZooKeeper Java客户端 Curator 的基本使用.介绍到的内容都是最基本的操作,能满足日常工作的基本需要. 如 ...
- 时间模块,os模块,sys模块
时间模块 和时间有关系的我们就要用到时间模块.在使用模块之前,应该首先导入这个模块. #常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2.time.time( ...
- 项目总结—校园办公管理系统(SSM框架搭建)
文章目录 CSDN下载地址:校园管理系统 GIT下载地址:校园管理系统 学以致用,学习完SSM框架之后,独立完成一个小院办公管理系统,熟悉框架的开发流程,熟悉项目的开发流程,完成一个简单的校园办公管理 ...
- Ajax(简介、基础操作、计算器,登录验证)
Ajax简介 Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术. ...
- SQL系列总结——基础篇(三)
之前的两篇文章SQL系列总结:<基础篇一>, <基础篇二>已经介绍了一些基本的数据库知识.现在让我们来从头开始构建一个数据库.到管理数据库和对象. 架构开始! 1.创建 ...