传送门

题意

分析

dp[12][20][20][20]; // dp[a][b][c][d]第a个弓箭手面临第a-1、a、a+1个弓箭手的生命值分别为b、c、d的状态

转移巧妙,需注意

trick

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int inf = 0x3f3f3f3f; #define A(p) (p-a>0)?p-a:0
#define B(p) (p-b>0)?p-b:0
#define F(i,a,b) for(int i=a;i<=b;++i) int dp[12][20][20][20];
int life[12]; int main()
{
int n,a,b;
scanf("%d %d %d",&n,&a,&b);
int cost1,costn;
memset(dp,0x3f,sizeof(dp));
F(i,0,n-1)
{
scanf("%d",life+i);
life[i]++;
}
cost1=(life[0]%b==0)?life[0]/b:life[0]/b+1;
life[0]=0;
life[1]=(life[1]-cost1*a>0)?life[1]-cost1*a:0;
life[2]=(life[2]-cost1*b>0)?life[2]-cost1*b:0;
costn=(life[n-1]%b==0)?life[n-1]/b:life[n-1]/b+1;
life[n-1]=0;
life[n-2]=(life[n-2]-costn*a>0)?life[n-2]-costn*a:0;
life[n-3]=(life[n-3]-costn*b>0)?life[n-3]-costn*b:0;
dp[1][0][life[1]][life[2]]=0;
for(int k=1;k<n-1;++k)
for(int i=16;i>=0;--i)
for(int j=16;j>=0;--j)
for(int t=16;t>=0;--t) if(dp[k][i][j][t]!=inf)
{
for(int u=i,v=j,w=t;(u||v||w);)
{
dp[k][B(u)][A(v)][B(w)]=min(dp[k][u][v][w]+1,dp[k][B(u)][A(v)][B(w)]);
u=B(u),v=A(v),w=B(w);
}
if(i==0) dp[k + 1][j][t][life[k + 2]] = min(dp[k + 1][j][t][life[k + 2]], dp[k][i][j][t]);
}
printf("%d\n",dp[n-1][0][0][0]+cost1+costn);
}

51nod 1489 蜥蜴和地下室(dp)的更多相关文章

  1. 51nod 1489 蜥蜴和地下室

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

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

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

  3. 51nod蜥蜴与地下室(1498)(暴力搜索)

    题意:一个数组s,再给你a,b值,除了s1和sn外,你可以攻击其他元素,你对这个元素的伤害为a,那么他两边的元素会受到b的牵连伤害,si-a,si-1-b,si+1-b: 求最小的次数,使得这个数组的 ...

  4. 51nod 1043 幸运号码(数位dp)

    题目链接:51nod 1043 幸运号码 题解:dp[i][j]表示 i 个数和为 j 的总数(包含0开头情况) dp[i][j] = dp[i-1][j-k] i & 1 :这里用滚动数组节 ...

  5. 51nod 1092 回文字符串 (dp)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1092 这个题是poj-3280的简化版,这里只可以增加字符,设 dp[i ...

  6. 51Nod 1201 整数划分 (经典dp)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1201 题意不多说了. dp[i][j]表示i这个数划分成j个数 ...

  7. 51nod 1326 奇妙的spfa+dp

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1326 1326 遥远的旅途 题目来源: TopCoder 基准时间限制: ...

  8. 51nod 1250 排列与交换——dp

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1250 仔细思考dp. 第一问,考虑已知 i-1 个数有多少种方案. ...

  9. 51nod 1022 石子归并 V2 —— DP四边形不等式优化

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1022 1022 石子归并 V2  基准时间限制:1 秒 空间限 ...

随机推荐

  1. linux shell操作

    ---------------------------------------------------- 原文:http://unix.stackexchange.com/questions/2863 ...

  2. linux 配置maven环境变量

    vi /etc/profile 按照如下样例编辑环境变量. 编辑之后记得使用source /etc/profile命令是改动生效. 5.验证结果 在任意路径下执行mvn -version验证命令是否有 ...

  3. Android 支付宝快捷支付集成及ALI64错误的有效解决

    支付宝开放平台採用了RSA安全签名机制,开发人员能够通过支付宝公钥验证消息来源.同一时候可使用自己的私钥对信息进行加密. RSA算法及数字签名机制是支付宝开放平台与开发人员网关安全通信的基础.若开发人 ...

  4. C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) C#各版本新特性 C#版本和.NET版本以及VS版本的对应关系

    C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) 2017年08月06日 11:53:13 阅读数:6705 历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有1 ...

  5. dom get selector

    function realsQuery(element) { if(!element){ return ""; } var currentQuery=""; i ...

  6. 基于ADB框架Robotium跨进程操作

    转自:http://blog.csdn.net/qingchunjun/article/details/42580937 2015年2月3日更新: 有些朋友在用真机尝试本方法时,抛出了InputStr ...

  7. openfire学习(一)

    需要开发一款软件,其中的即时通讯功能使用xmpp协议来做,服务端用openfire. openfire的下载和配置就不多说,可能大多数人第一次用会遇到登陆不了的问题,我也遇到了,事实上登陆错误是因为用 ...

  8. 注意css 小细节 颜色能缩写尽量缩写

    如 background: #333333; 改为 background: #333;

  9. OpenSSL生成CA证书及终端用户证书

    环境 OpenSSL 1.0.2k FireFox 60.0 64位 Chrome 66.0.3359.181 (正式版本)(32位) Internet Explorer 11.2248.14393. ...

  10. chrome——关于chrome浏览器的奇葩问题

    前言 说下自己遇到的关于chrome的奇葩问题~ 问题 目前就一个,还是刚才才遇到的~ 消息通知 客户的chrome浏览器死活没有通知,检查后发现通知权限未开启, 通知权限开启后,还是没有提示,最后排 ...