传送门

题意

分析

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);
}

最新文章

  1. 记一个mvn奇怪错误: Archive for required library: &#39;D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar&#39; in project &#39;xxx&#39; cannot be read or is not a valid ZIP file
  2. jsp一句话
  3. c++ 在windows下建立目录
  4. SSO之CAS总结
  5. Brief introduction to Scala and Breeze for statistical computing
  6. Linux命令-free
  7. 匿名函数和Lambda表达式
  8. mysql 语句练习
  9. 软件工程工具学习(1)---Visio
  10. URL的概念
  11. SVN Upgrade working copy
  12. JMeter学习笔记02-基础介绍
  13. 入坑C++之vs 新建C++项目
  14. RabbitMQ用户增删及权限控制
  15. Cmder 常用配置
  16. js基础知识:闭包,事件处理,原型
  17. Spark Strcutured Streaming中使用Dataset的groupBy agg 与 join 示例(java api)
  18. 如何在windows server 2008 部署asp.net mvc
  19. BitAdminCore框架应用篇:(三)核心套件querySuite入门介绍
  20. 给表格控件DBGrid加上记录序号的列

热门文章

  1. Android实现SQLite数据库的增、删、改、查的操作
  2. SVN系列之—-SVN版本回滚的办法
  3. ansible 基本命令学习与踩坑
  4. [leetcode] database解题记录
  5. 使用MegaCli查看raid信息
  6. 让Spring Boot启动更快
  7. android5.0(Lollipop) BLE Peripheral牛刀小试
  8. Java网络编程知识点(1)
  9. Anaconda和Pycharm安装和配置教程
  10. 三分钟教你学Git(十四) 之 线下传输仓库