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的概 ...
随机推荐
- nokogiri Fail install on Ruby 2.3 for Windows #1456 <From github>
Q: gem install railson nokogiri install fail with error: 'nokogiri requires Ruby version < 2.3, & ...
- 阿里云OSS对象存储服务(二)
一.使用SDK 在OSS的概览页右下角找到"Bucket管理",点击"OSS学习路径" 点击"Java SDK"进入SDK开发文档 二.创建 ...
- 获取html中某些标签的值
一.获取单选按钮radio的值 <!doctype html> <html lang="en"> <head> <meta charset ...
- three.js cannon.js物理引擎地形生成器和使用指针锁定控件
今天郭先生说一说使用cannon.js物理引擎绘制地形和使用指针锁定控件.效果如下图.线案例请点击博客原文. 这里面的生成地形的插件和指针锁定控件也是cannon.js的作者schteppe封装的,当 ...
- 一步步使用SpringBoot结合Vue实现登录和用户管理功能
前后端分离开发是当今开发的主流.本篇文章从零开始,一步步使用SpringBoot结合Vue来实现日常开发中最常见的登录功能,以及登录之后对用户的管理功能.通过这个例子,可以快速入门SpringBoot ...
- try-catch-finally中的4个大坑,不小心就栽进去了!
在 Java 语言中 try-catch-finally 看似简单,一副人畜无害的样子,但想要真正的"掌控"它,却并不是一件容易的事.别的不说,咱就拿 fianlly 来说吧,别看 ...
- Shell从入门到精通
熟悉基本shell操作不仅是运维的基本功,对于开发来说也是多多益善,我在学习的过程中,总结了十个练手的小demo,并附上涉及的知识点,仅供娱乐. 1. 多线程ping监控,检查同一网段的IP是否连通 ...
- memset 在c++中使用细节注意
C语言,在利用struct进行数据封装时,经常会使用memset(this,0,sizeof(*this))来初始化.而C++中,有时候也会用到struct,在利用memset进行初始化时,非常容易踩 ...
- loj10010糖果传递
题目描述 原题来自:HAOI 2008 有 n 个小朋友坐成一圈,每人有 a_i 颗糖果.每人只能给左右两人传递糖果.每人每次传递一颗糖果的代价为 1 .求使所有人获得均等糖果的最小代价. 输入格式 ...
- 关于ckfinder上传文件添加自定义处理方案
上篇博客中介绍了如何使用ckfinder中自定义按钮的功能,实现自定义上传的功能,但是却无法解决用户使用拖拽文件上传方式中添加自定义事件,今天我们来用另一种更简洁的方式来实现上传文件重名时做一些自定义 ...