题解 CF6D CF6D Lizards and Basements 2

$dfs$ 好啊

题意

有一队人,你可以用火球点某个人,会对当前人造成a点伤害,对旁边的人造成b点伤害。

不能打1号和n号,求最少多少发点死所有人。

Note

一个人被打死当且仅当它的血量 <0。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<cstdlib>
 6 #include<algorithm>
 7 #include<string>
 8 #define ll long long
 9 #define maxn 100005
10 #define inf 2147483647
11 #define mod 10003
12 #define eps 1e-6
13 #define pi acos(-1.0)
14 #define de(x) ((x)*(x))
15 using namespace std;
16 inline int read(){
17 int x=0,f=1; char ch=getchar();
18 while(!isdigit(ch)) {if(ch==‘-‘)f=-1;ch=getchar();}
19 while(isdigit(ch)) {x=x*10+ch-48;ch=getchar();}
20 return x*f;
21 }
22 int n,a,b,h[15],tot,ans;
23 int p[155],val[155];
24 inline void check(){
25 int yu=max(h[n-1]/a+(h[n-1]>=0),h[n]/b+(h[n]>=0));
26 for(int i=1;i<=yu;i++) p[++tot]=n-1;
27 if(ans>tot){
28 for(int i=1;i<=tot;i++) val[i]=p[i];
29 ans=tot;
30 }
31 tot-=yu;
32 }
33 inline void dfs(int now){//标准的dfs
34 if(now>n-1) {check();return;}
35 if(h[now-1]<0) dfs(now+1);
36 int last=tot,A=h[now-1],B=h[now],C=h[now+1];
37 while(1){
38 h[now]-=a; h[now-1]-=b;
39 h[now+1]-=b; p[++tot]=now;
40 if(h[now-1]<0) dfs(now+1);
41 if((h[now-1]<0&&h[now]<0)||tot>=ans){
42 tot=last;
43 h[now-1]=A; h[now]=B; h[now+1]=C;
44 break;
45 }
46 }
47 }
48 signed main(){
49 n=read(); a=read(); b=read();
50 for(int i=1;i<=n;i++) h[i]=read();
51 ans=inf; tot=0;
52 dfs(2);
53 printf("%d\n",ans);
54 for(int i=1;i<=ans;i++) printf("%d ",val[i]);
55 return 0;
56 }

yyy

原文地址:https://www.cnblogs.com/cbyyc/p/11440424.html

时间: 2024-10-22 21:32:59

题解 CF6D CF6D Lizards and Basements 2的相关文章

Codeforces 6D Lizards and Basements 2 dfs+暴力

题目链接:点击打开链接 #include<stdio.h> #include<iostream> #include<string.h> #include<set> #include<vector> #include<map> #include<math.h> #include<queue> #include<string> #include<stdlib.h> #include<a

Codeforces Beta Round #6 (Div. 2 Only) D. Lizards and Basements 2

题目大意 有排成一排的n个弓箭手,第i个弓箭手有 hi 的血量.主角可以使用火球术去攻击弓箭手.被直接攻击的弓箭手i受到a点伤害,同时第i?1个和第i+1个弓箭手会受到b点伤害.当弓箭手的血量小于0时弓箭手死亡.问最少需要释放多少个火球术,每个火球术攻击的是第几个弓箭手. 解题思路 这是一个动态规划问题.定义一个四维dp数组.对于dp[i][j][k][l]来说表示了当第i?1个弓箭手的血量是j,第i个弓箭手的血量是k,第i+1个弓箭手的血量是l时释放火球的最小数目.初始值dp[1][h[0]]

CodeForces 6D Lizards and Basements 2

算是简单DP了,一开始竟没看出来,醉了. 首先,对于当前位置site,需知道site-1处丢了pre个,site处丢了now个火球,然后枚举site+1处的情况. #include <algorithm> #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <queue> #include <cmath>

hdu 2732 Leapin&#39; Lizards(最大流)Mid-Central USA 2005

废话: 这道题不难,稍微构造一下图就可以套最大流的模板了.但是我还是花了好久才解决.一方面是最近确实非常没状态(托词,其实就是最近特别颓废,整天玩游戏看小说,没法静下心来学习),另一方面是不够细心,输出格式错了大意没有发现死一只和死多只之间的区别,卡在那里动不了. 题意: 在一张n*m的地图中,有一群蜥蜴,这群蜥蜴每次可以跳跃曼哈顿距离d(曼哈顿距离——dis(a, b) = |ax-bx|+|ay-by|,之后所有的距离都是曼哈顿距离),这些蜥蜴只能在地图上的一些柱子上跳跃.柱子i最多可以支持

HDU-2732 (Leapin&#39; Lizards) 网络流

网络流真的博大精深 题意: 在一个迷宫中,新进了一批小蜥蜴. 然而因为一些原因,出口被封住了,而且迷宫燃起了大火,现在小蜥蜴们急着离开,想要求助于ACMer们,哈哈-- 把蜥蜴所在的坐标当做一根有高度为k的柱子,现在每有一只蜥蜴跳出格子,格子的柱子高度就会减少一,直到为0,表示这个格子不能在通过蜥蜴. 题目规定,小蜥蜴们可以从当前格子往周围跳出小于等于d距离的长度.当蜥蜴跳出迷宫的边界,就算这只蜥蜴存活下来了,而那些不能逃出去的,就只能等着被烤成烤肉了.现在想要让更多的蜥蜴逃出,求最后剩下的蜥蜴

【HDU】 2732 Leapin&#39; Lizards

Leapin' Lizards 题目链接 Leapin'Lizards 题目大意 给你两个图,一个用0,1,2,3表示,一个用 L 或 . 表示.其中用L表示的图中,有L的位置表示有蜥蜴,没有L的位置表示没有蜥蜴.用数字表示的图中,数字表示当前位置柱子的高度,每次一个蜥蜴可以从一个柱子跳到距离d以内的另外一个柱子,每跳跃一次,当前柱子的高度就减一,问最后会有多少只蜥蜴被困在里面. 题解 首先,可以明显的看到,一个柱子是有固定的通过次数的,这一点跟网络流中边的属性很像,但是这里的柱子是点,并不是边

HDU2732:Leapin&#39; Lizards(最大流)

Leapin' Lizards Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4250    Accepted Submission(s): 1705 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2732 Description: Your platoon of wandering li

洛谷 P1079 Vigen&#232;re 密码 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1079 题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为 南军所广泛使用. 在密码学中,我们称需要加密的信息为明文,用 M 表示:称加密后的信息为密文,用 C 表示:而密钥是一种

8.8联考题解

今天的T1让我怀疑我是不是在做奥赛题--这考的是什么知识点啊这个,会不会用绝对值函数? Evensgn 的债务 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Evensgn 有一群好朋友,他们经常互相借钱.假如说有三个好朋友A,B,C.A 欠 B 20 元,B 欠 C 20 元,总债务规模为 20+20=40 元.Evensgn 是个追求简约的人,他觉得这样的债务太繁杂了.他认为,上面的债务可以完全等价为 A 欠C20 元,B 既不欠别人,别人也不欠他.这样总债务规模就压缩到了