https://www.luogu.org/problemnew/show/P2551

首先这道题没有给Hm的最大值,很坑,只能随便开一个100没想到还过了。

观察题目,发现虽然高度可以变化,但是速度是不会下降的。

那么就可以考虑dp,设 \(dp[h][v]\) 表示从开始状态 \(dp[h1][v1]=0\) 到达高度为h,且速度为v的最短的时间。

搞个记忆化搜索就可以了。

需要注意的地方是,不知道什么玄学原因,不能在h为1的时候俯冲,大概是怕撞到地面吧。

要么给h加上上限hm,要么赋值初始化dp为INF标记为禁止状态。

这道题绝对不是蓝色难度,顶多绿色。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll; const int INF=0x3f3f3f3f; int h1,v1,h2,v2,dh,hm; struct Node{
int cost;
int preh,prev;
char op;
Node(){};
Node(int _cost,int _preh,int _prev):cost(_cost),preh(_preh),prev(_prev){};
}node[105][7]; bool vis[105][7];
int costtime[105][7][4]; int DP(int h,int v){
//printf("h=%d v=%d\n",h,v);
if(vis[h][v]){
//printf("h=%d v=%d\n",h,v);
//printf(" ret=%d\n",node[h][v].cost);
return node[h][v].cost;
}
else{
vis[h][v]=1;
if(v<v1){
//printf("h=%d v=%d\n",h,v);
//printf(" ret=INF\n");
node[h][v].cost=INF;
return INF;
}
if(h==h1&&v==v1){
//printf("h=%d v=%d\n",h,v);
//printf(" ret=0\n");
node[h][v].cost=0;
return 0;
}
int &cost=node[h][v].cost;
int &preh=node[h][v].preh;
int &prev=node[h][v].prev;
char &op=node[h][v].op;
cost=INF;
if(h!=0){
int tcost=DP(h-1,v)+costtime[h-1][v][1];
if(tcost<cost){
preh=h-1;
prev=v;
cost=tcost;
op='R';
}
}
if(v!=0){
int tcost=DP(h,v-1)+costtime[h][v-1][2];
if(tcost<cost){
preh=h;
prev=v-1;
cost=tcost;
op='A';
}
}
if(h>=2&&h+1<=hm){
int tcost=DP(h+1,v-1)+costtime[h+1][v-1][3];
if(tcost<cost){
preh=h+1;
prev=v-1;
cost=tcost;
op='D';
}
}
//printf("h=%d v=%d\n",h,v);
//printf(" ret=%d\n",cost);
return cost;
}
} void out(int h,int v){
if(h==h1&&v==v1){
return;
}
else{
out(node[h][v].preh,node[h][v].prev);
}
printf("%c",node[h][v].op);
} int main() {
scanf("%d%d%d%d%d%d",&h1,&v1,&h2,&v2,&dh,&hm);
h1/=dh,h2/=dh,hm/=dh; for(int i=0;i<hm;i++){
for(int j=1;j<=6;j++){
scanf("%d",&costtime[i][j][1]);
}
} for(int i=0;i<=hm;i++){
for(int j=1;j<=5;j++){
scanf("%d",&costtime[i][j][2]);
}
} for(int i=2;i<=hm;i++){
for(int j=1;j<=5;j++){
scanf("%d",&costtime[i][j][3]);
}
} memset(vis,0,sizeof(vis)); printf("%d\n",DP(h2,v2));
out(h2,v2);
printf("\n");
}

洛谷 - P2551 - 华夏60战斗机 - 简单dp的更多相关文章

  1. 洛谷 - P1004 - 方格取数 - 简单dp

    https://www.luogu.org/problemnew/show/P1004 这道题分类到简单dp但是感觉一点都不简单……这种做两次的dp真的不是很懂怎么写.假如是贪心做两次,感觉又不能证明 ...

  2. 洛谷 - P1115 - 最大子段和 - 简单dp

    https://www.luogu.org/problemnew/show/P1115 简单到不想说……dp[i]表示以i为结尾的最大连续和的值. 那么答案肯定就是最大值了.求一次max就可以了. 仔 ...

  3. (水题)洛谷 - P2439 - 阶梯教室设备利用 - 简单dp

    https://www.luogu.org/fe/problem/P2439 很明显时间是一个维度,按照时间顺序决策就行了. dp[i]表示以时间i为结尾所能达到的最长演讲时间. #include & ...

  4. 洛谷 P4072 [SDOI2016]征途 斜率优化DP

    洛谷 P4072 [SDOI2016]征途 斜率优化DP 题目描述 \(Pine\) 开始了从 \(S\) 地到 \(T\) 地的征途. 从\(S\)地到\(T\)地的路可以划分成 \(n\) 段,相 ...

  5. 华夏60 战斗机(最短路dijkstra)

    华夏60 战斗机(最短路dijkstra) 华夏60 超音速战斗机是当今世界上机动性能最先进的战斗机.战斗过程中的一个关键问题是如何在最短的时间内使飞机从当前的飞行高度和速度爬升/俯冲到指定的高度并达 ...

  6. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  7. 洛谷 P3177 [HAOI2015]树上染色 树形DP

    洛谷 P3177 [HAOI2015]树上染色 树形DP 题目描述 有一棵点数为 \(n\) 的树,树边有边权.给你一个在 \(0 \sim n\)之内的正整数 \(k\) ,你要在这棵树中选择 \( ...

  8. 洛谷P1063 能量项链(区间DP)(环形DP)

    To 洛谷.1063 能量项链 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的 ...

  9. 洛谷P1880 石子合并(区间DP)(环形DP)

    To 洛谷.1880 石子合并 题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1 ...

随机推荐

  1. h5页面测试

    转自:http://www.blogjava.net/qileilove/archive/2014/07/24/416154.html?utm_source=tuicool&utm_mediu ...

  2. WannaCry勒索病毒处理指南

    北京时间2017年5月12日晚,勒索软件"WannaCry"感染事件在全球范围内爆发,被攻击者电脑中的文件被加密,被要求支付赎金以解密文件: 1.开机前断网 如果电脑插了网线,则先 ...

  3. linux上查看系统内核版本命令(转载)

    uname -a uname -r 查看发行版本信息: 在RedHat系统里,存在一个/etc/redhat-release文件,里面保存了发行版的版本信息 $cat /etc/redhat-rele ...

  4. 深入理解Java:注解(Annotation)自己定义注解入门

    深入理解Java:注解(Annotation)自己定义注解入门 要深入学习注解.我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前.我们就必须要了解Java为我们提供的元注解和相关定义注解的 ...

  5. 区块链+AI将给区块链带来怎样的改变?

    区块链和人工智能技术都是互联网时代最新.最热的技术,不仅可以改变我们生活,还能产生巨大的财富,为此国家大力支持发展,科技巨头们也纷纷布局.那区块链与人工智能结合,对区块链技术而言会产生什么样的化学反应 ...

  6. Dispatch Sources(转)

    Dispatch Sources 现代系统通常提供异步接口,允许应用向系统提交请求,然后在系统处理请求时应用可以继续处理自己的事情.Grand Central Dispatch正是基于这个基本行为而设 ...

  7. Rime输入工具的修改与编译安装

    作为一个比较“事儿多”的五笔用户,在使用过几乎所有的主流输入工具后,我最终选择了定制性非常高(同时也比较难以上手)的Rime.刚开始是在Windows下使用小狼毫0.9.30版,这个工具在上屏速度.热 ...

  8. codeforces B. Roma and Changing Signs 解题报告

    题目链接:http://codeforces.com/problemset/problem/262/B 题目意思:给出 n 个数和恰好一共要做的操作总数k.通过对n个数进行k次操作,每次操作可以把a[ ...

  9. COGS【345】共荣圈 && 【426】血帆海盗

    题面 UPD:COGS 貌似进不去了,链接失效就删掉了. 如果你不小心看到了题目评论区,那你就会知道这是一道双倍经验题,另一题的链接见题目评论区…… 网络流+tarjan好题,但如果你真的的理解了网络 ...

  10. mapkeeper总结

    1. mapkeeper下有个thrift目录,在该目录编译c++版本和java版本. C++版本需要系统安装thrift-0.9.2,而java版本需要系统安装thrift-0.8.0 2. thr ...