CF1066F Yet another 2D Walking
DP
由图可以知道优先级相同的点都在一个“7”字形中
所以在走当前的优先级的点时最好从右下的点走到左上的点,或从从左上的点走到右下的点
那记dp[i][0]表示在走完第i个优先级时停在左上角的那个点
dp[i][1]表示在走完第i个优先级是停在右下角的那个点
答案就是max(dp[最大优先级][0],dp[最大优先级][1])
还有要将优先级离散化或者分组
注意边界条件,和转移方程即可
#include <bits/stdc++.h> #define inf 1e9 #define ll long long using namespace std; ll n,dp[210000][2],w,up[210000],down[210000]; struct node {ll x,y,level; }sh[210000]; node start; ll m_max(ll a,ll b) {if (a>b)return a;elsereturn b; } ll m_min(ll a,ll b) {if (a<b)return a;elsereturn b; } ll m_abs(ll x) {if (x<0)return -x;elsereturn x; } bool cmp(node a,node b) {if (a.level!=b.level)return a.level<b.level;else{if (a.x!=b.x)return a.x<b.x;elsereturn a.y>b.y;} } ll dis(node a,node b) {return m_abs(a.x-b.x)+m_abs(a.y-b.y);//求曼哈顿距离 } int main() {scanf("%lld",&n);for (ll i=1;i<=n;i++){scanf("%lld%lld",&sh[i].x,&sh[i].y);sh[i].level=m_max(sh[i].x,sh[i].y);}sort(sh+1,sh+1+n,cmp); ll kind;kind=sh[1].level;w=1;up[w]=1;for (ll i=2;i<=n;i++){if (kind!=sh[i].level){down[w]=i-1;w++;up[w]=i;//将每一个优先级的左上角和右下角的点的下标处理出来kind=sh[i].level;//进行分组}}down[w]=n;start.x=0;start.y=0;for (ll i=1;i<=w;i++)dp[i][0]=dp[i][1]=inf;dp[1][1]=dis(start,sh[up[1]])+dis(sh[up[1]],sh[down[1]]);dp[1][0]=dis(start,sh[down[1]])+dis(sh[up[1]],sh[down[1]]);for (ll i=2;i<=w;i++){//简单的转移dp[i][0]=m_min(dp[i-1][0]+dis(sh[up[i-1]],sh[down[i]]),dp[i-1][1]+dis(sh[down[i-1]],sh[down[i]]))+dis(sh[up[i]],sh[down[i]]);dp[i][1]=m_min(dp[i-1][0]+dis(sh[up[i-1]],sh[up[i]]),dp[i-1][1]+dis(sh[down[i-1]],sh[up[i]]))+dis(sh[up[i]],sh[down[i]]);}printf("%lld\n",m_min(dp[w][0],dp[w][1])); }
转载于:https://www.cnblogs.com/huangchenyan/p/11180382.html
CF1066F Yet another 2D Walking相关推荐
- CF1066F-Yet another 2D Walking【贪心】
正题 题目链接:https://www.luogu.com.cn/problem/CF1066F 题目大意 平面上有nnn个点,每个点在max(x,y)max(x,y)max(x,y)层,走第kkk层 ...
- matlab 棍,双足机器人行走棍图怎么用MATLAB画出来
匿名用户 1级 2016-05-25 回答 The following is a function I wrote to generate a stick diagram of robot motio ...
- 第一篇----行走控制的研究现状:双足机器人四足机器人
最近打算入门双足机器人.四足机器人,通过在网上搜索,整理一份比较全面的介绍目前发展状况的资料. 需要关注的几个学术大牛人物 Marc Raibert 网站为:MIT Leg Laboratory, 网 ...
- Unity 2D游戏开发教程之游戏中精灵的跳跃状态
Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...
- Unity 2D游戏开发教程之精灵的死亡和重生
Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...
- Unity 2D游戏开发教程之2D游戏的运行效果
Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑 ...
- Unity 2D游戏开发教程之使用脚本实现游戏逻辑
Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...
- Unity 2D游戏开发教程之2D游戏的运行效果
Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...
- HTML5 2D平台游戏开发#4状态机
在实现了<HTML5 2D平台游戏开发--角色动作篇之冲刺>之后,我发现随着角色动作的增加,代码中的逻辑判断越来越多,铺天盖地的if() else()语句实在让我捉襟见肘: 这还仅仅是角色 ...
最新文章
- 阐述 QUEST CENTRAL FOR DB2 八罪
- Java入门超简单程序Song List
- Relaltek声卡在UBUNTU下没有声音的解决方法。
- iOS中的锁和线程同步
- ie以及ie内核浏览器连不上网,其他浏览器可以,部分软件连不上网的解决办法
- 基于android的酒店客房预订客户端app
- 使用python读写灰度图像
- 解决国外软件官网打不开,浏览器访问经常卡在正在建立TLS握手安全连接。
- 侯捷c++1114新标准
- 基于CNONIX国家标准的出版社ERP系统建设分享
- Smartbi产品军团战斗成员大阅兵
- 成功通过PMP考试---我的经验
- OLTP、OLAP与HTAP
- Apache DolphinScheduler 诞生记
- Codeforces Round 520 div2
- 南理工计算机学院吉祥物,我们想要一个吉祥物,就差一个设计者了!
- Java实现数字密码发生器
- Flink和Spark中文乱码问题
- 深入JVM内核(七)——性能监控工具
- 【传智播客郑州校区分享】在传智播客郑州校区学习倍感幸运
热门文章
- (转)百度文库浏览器分析及实现(续)
- android愤怒小鸟游戏、自定义View、掌上餐厅App、OpenGL自定义气泡、抖音电影滤镜效果等源码...
- 「每天一道面试题」String和StringBuilder、StringBuffer的区别
- druid读取hdfs文件
- Gradle 配置jetty启动项目
- 《HTTPS权威指南》- SSL、TLS和密码学学习笔记
- JAVA使用JDBC连接MySQL数据库
- sed命令 学习笔记
- [C++] 用Xcode来写C++程序[6] Name visibility
- 电子技术学习实践DIY