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相关推荐

  1. CF1066F-Yet another 2D Walking【贪心】

    正题 题目链接:https://www.luogu.com.cn/problem/CF1066F 题目大意 平面上有nnn个点,每个点在max(x,y)max(x,y)max(x,y)层,走第kkk层 ...

  2. matlab 棍,双足机器人行走棍图怎么用MATLAB画出来

    匿名用户 1级 2016-05-25 回答 The following is a function I wrote to generate a stick diagram of robot motio ...

  3. 第一篇----行走控制的研究现状:双足机器人四足机器人

    最近打算入门双足机器人.四足机器人,通过在网上搜索,整理一份比较全面的介绍目前发展状况的资料. 需要关注的几个学术大牛人物 Marc Raibert 网站为:MIT Leg Laboratory, 网 ...

  4. Unity 2D游戏开发教程之游戏中精灵的跳跃状态

    Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...

  5. Unity 2D游戏开发教程之精灵的死亡和重生

    Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...

  6. ​Unity 2D游戏开发教程之2D游戏的运行效果

    ​Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑 ...

  7. Unity 2D游戏开发教程之使用脚本实现游戏逻辑

    Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...

  8. Unity 2D游戏开发教程之2D游戏的运行效果

    Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...

  9. HTML5 2D平台游戏开发#4状态机

    在实现了<HTML5 2D平台游戏开发--角色动作篇之冲刺>之后,我发现随着角色动作的增加,代码中的逻辑判断越来越多,铺天盖地的if() else()语句实在让我捉襟见肘: 这还仅仅是角色 ...

最新文章

  1. 阐述 QUEST CENTRAL FOR DB2 八罪
  2. Java入门超简单程序Song List
  3. Relaltek声卡在UBUNTU下没有声音的解决方法。
  4. iOS中的锁和线程同步
  5. ie以及ie内核浏览器连不上网,其他浏览器可以,部分软件连不上网的解决办法
  6. 基于android的酒店客房预订客户端app
  7. 使用python读写灰度图像
  8. 解决国外软件官网打不开,浏览器访问经常卡在正在建立TLS握手安全连接。
  9. 侯捷c++1114新标准
  10. 基于CNONIX国家标准的出版社ERP系统建设分享
  11. Smartbi产品军团战斗成员大阅兵
  12. 成功通过PMP考试---我的经验
  13. OLTP、OLAP与HTAP
  14. Apache DolphinScheduler 诞生记
  15. Codeforces Round 520 div2
  16. 南理工计算机学院吉祥物,我们想要一个吉祥物,就差一个设计者了!
  17. Java实现数字密码发生器
  18. Flink和Spark中文乱码问题
  19. 深入JVM内核(七)——性能监控工具
  20. 【传智播客郑州校区分享】在传智播客郑州校区学习倍感幸运

热门文章

  1. (转)百度文库浏览器分析及实现(续)
  2. android愤怒小鸟游戏、自定义View、掌上餐厅App、OpenGL自定义气泡、抖音电影滤镜效果等源码...
  3. 「每天一道面试题」String和StringBuilder、StringBuffer的区别
  4. druid读取hdfs文件
  5. Gradle 配置jetty启动项目
  6. 《HTTPS权威指南》- SSL、TLS和密码学学习笔记
  7. JAVA使用JDBC连接MySQL数据库
  8. sed命令 学习笔记
  9. [C++] 用Xcode来写C++程序[6] Name visibility
  10. 电子技术学习实践DIY