题目描述

样例:

实现解释:

没想到你也是个刀客塔之二维DP

知识点:

动态规划,多条流水线调度?可以看做一种流水线调度

坑点:

输入内容的调整(*的特殊判定),开头结尾的调整策略

从题意可知,要做的就是从起始点移动到蓝点,并且在过程中会有一个值的记录,这就可以和一些基础题目联系起来:捡金币问题,流水线问题等等。

不过注意在使用板子时需要注意值的调度策略:对无法过去的地点,可将敌人攻击值设为99999,即无限,从而在进行动态规划时也可直接参与计算。借助这一攻击无限化的想法,对第一列和最后一列也需要进行处理:无法从开始点直接进入的第一列的值和无法在最后一列到达结束点,同样是到达无意义(无法上下移动),因此设为无穷。

调整之后便可直接借助dp进行,假设dp数组为dp[i][j]:到达第i行j列时的最小受损值。则很容易可得到状态转移方程:dp[i][j] = min(dp[i][j-1],dp[i-1][j-1],dp[i+1][j-1]) + a[i][j];

基于方程递归进行即可,注意dp的初始化(第一列),这里由于是参考多条流水线进行的编写,因此应该会很熟悉。

完整代码:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define NO 99999
int a[][];
int main()
{
ios::sync_with_stdio(false);
int n,m;
cin >> n >> m;
int a[n][m];
int dp[n][m];
int h,from,to;
char temp;
cin >> h >> from >> to;
for(int i = ;i<n;i++)
{
for(int j = ;j<=m;j++)
{
cin >> temp;//便于比较是否可通行
if(temp == '*') a[i][j] = NO;//不可通行则设为一定死的值
else a[i][j] = temp-'';//否则存储数字
}
}
from -= ;
to -= ;
//这里是为了和脚标配合进行的处理
for(int i = ;i<n;i++)
{
//第一列中开局不能到达的,最后一列中不能到结束点的
//相当于不可达,设为大值
if(abs(from-i) > ) a[i][] = NO;
if(abs(to-i) > ) a[i][m] = NO;
}
for(int i = ;i<n;i++)
{
//象征性的初始化,第一列
dp[i][] = a[i][];
}
int tempf;//存储临时的掉血数
for(int i = ;i<=m;i++)
{
for(int j = ;j<n;j++)
{
//向右走
tempf = dp[j][i-]+a[j][i];
//判断右上和右下
for(int k = -;k<=;k+=)
{
//越界则跳过
if(j+k<||j+k>n-) continue;
if(tempf > dp[j+k][i-]+a[j][i])
{
tempf = dp[j+k][i-]+a[j][i];
}
}
dp[j][i] = tempf;
}
}
//获取最小值设为最大值
tempf = NO;
for(int k = -;k<=;k++)
{
if(to+k<||to+k>n-) continue;//越界跳过
if(dp[to+k][m] > NO) continue;//有不可达的点,跳过
if(dp[to+k][m] < tempf) tempf = dp[to+k][m];//最小值
}
//判断最小掉血数和hp的关系
if(tempf-h > ) cout << "doctor win\n";
else cout << h-tempf << '\n';
return ;
}

题解:2018级算法第六次上机 C6-危机合约的更多相关文章

  1. 题解:2018级算法第六次上机 C6-不Nan的过河

    题目描述: 样例: 实现解释: 一道因为没排序做了一个小时没做出来的二分答案模板题(手动呲牙) 知识点: 二分答案,最大值最小化 坑点: 排序,judge(mid)函数内计数的实现 其实从最长一步的最 ...

  2. 题解:2018级算法第五次上机 C5-图2

    题目描述: 样例: 实现解释: 所有结点对最短路径的板子题 知识点: 寻找所有结点对最短路径,动态规划 坑点: 无坑,注意建边即可 使用的算法为floyd算法 按照程序顺序解释如下: 首先建图,以邻接 ...

  3. 题解:2018级算法第四次上机 C4-最小乘法

    题目描述: 样例: 实现解释: 和字符串处理结合的动态规划,个人认为比较难分析出状态转移方程,虽然懂了之后挺好理解的 知识点: 动态规划,字符串转数字 题目分析: 首先按照最基础:依据题意设计原始dp ...

  4. 题解:2018级算法第四次上机 C4-商人卖鱼

    题目描述: 样例: 实现解释: 需要简单分析的贪心题 知识点: 贪心,自定义排序,提前存储 题目分析: 卖鱼,鱼卖出去需要时间,鱼没被卖出去之前需要吃饲料 则有,如果卖a鱼的话b鱼会吃饲料c份,而卖b ...

  5. 题解:2018级算法第三次上机 C3-Zexal的浩瀚星辰

    题目描述: 样例: 实现解释: 一道结合了火箭发射的贪心题目 知识点: 贪心,优先队列 题目分析: 根据题目描述可知,延迟后时间是正常推进的,也就是假设共有n个火箭,推迟k小时.则在到达k+1小时时, ...

  6. 2016级算法第六次上机-G.ModricWang likes geometry

    1116 ModricWang likes geometry 思路 难题,非常考察几何知识,放在这里作为计算几何场次的最难的题. 原题地址 原版题解 代码

  7. 2016级算法第六次上机-F.AlvinZH的学霸养成记VI

    1082 AlvinZH的学霸养成记VI 思路 难题,凸包. 分析问题,平面上给出两类点,问能否用一条直线将二者分离. 首先应该联想到这是一个凸包问题,分别计算两类点的凸包,如果存在符合题意的直线,那 ...

  8. 2016级算法第六次上机-E.Bamboo之吃我一拳

    Bamboo之吃我一拳 分析 当两个点的距离<=d时,才可以出拳,想要使得满足出拳条件的点对最少但不为0 寻找最近点对距离,得到的最近距离能够使得可以出拳的组数最少,因为除了最近点对外其他组合均 ...

  9. 2016级算法第六次上机-A.Bamboo之寻找小金刚

    Bamboo之寻找小金刚 分析 可以抽象为许多连续线段,分别计数左拐和右拐的个数.考察叉积的基础应用. 假设ABC三点构成一个夹角∠ABC,B就是拐点,AC是辅助形成夹角.考虑线段AB和BC形成的向量 ...

随机推荐

  1. CSS中的float和margin的混合使用

    在最近的学习中,在GitHub上找了一些布局练习,我发现了我自己对布局超级不熟悉(很难受). 在以前的学习中,感觉使用CSS就记住各个属性的功能就OK了,但是呢?真的很打脸.不说了,太伤心了,进入正题 ...

  2. ubuntu12.04 跳过grub选择

    1.修改/etc/grub.d/00_head文件. set timeout=-1 修改成 set timeout = ${GRUB_RECORDFAIL_TIMEOUT:--1} 2.修改/etc/ ...

  3. Spark-stream,kafka结合

    先列参考文献: Spark Streaming + Kafka Integration Guide (Kafka broker version 0.10.0 or higher):http://spa ...

  4. 【前端】仿消息推送到App提示

    效果: JS: (function ($) { $.fn.loopmsg = function (options, param) {   if (typeof options == 'string') ...

  5. centos7 和centos6 服务操作命令对比

    以httpd为例子: 指令名称 centos 6 centos 7 启动服务 service httpd start systemctl start httpd.service 关闭服务 servic ...

  6. iOS/swift 单选框和复选框

    /** 复选框 */ import UIKit class LYBmutipleSelectView: UIView { var selectindexs:[Int]=[]//选中的 //标题数组 v ...

  7. 如何利用Excel设计一个唱票统计系统?

    具体操作如下: 首先需要一个如下的数据结构. 唱票数G列区域,不能手动输入候选人票数,这样很不方便,所以我们需要一个窗体控件,用点击鼠标的方法来实现唱票.在“开发工具-插入-数值调节钮”下图3处,然后 ...

  8. JSON案例

    原文链接:https://zhuanlan.zhihu.com/p/62763428 json字符串->JSONObject 用JSON.parseObject()方法即可将JSon字符串转化为 ...

  9. 十六进制颜色码及其表示-(6 digit color code)

    我们知道对于RGB颜色系统,颜色是由三个256位的十进制数值表示的: (R:0-255,G:0-255,B:0-255) 那么一个三元组可以确定一种颜色. 然而,在很多配置文件中颜色并不是直接用十进制 ...

  10. Spring IOC原理补充(循环依赖、Bean作用域等)

    文章目录 前言 正文 循环依赖 什么是循环依赖? Spring是如何解决循环依赖的? 作用域实现原理以及如何自定义作用域 作用域实现原理 自定义Scope BeanPostProcessor的执行时机 ...