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;
else
return b;
}
ll m_min(ll a,ll b)
{
if (a<b)
return a;
else
return b;
}
ll m_abs(ll x)
{
if (x<0)
return -x;
else
return 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;
else
return 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]));
}
CF1066F Yet another 2D Walking的更多相关文章
- cf1066F Yet Another 2D Walking (贪心+dijkstra)
易证我们走的时候只会从某一层的某端点走向另一端点.然后走向下一层的某端点.. 所以建图然后dijkstra就行了 调了一年以后发现dijkstra写错了 #include<bits/stdc++ ...
- CodeForces Round #515 DIv.3 F. Yet another 2D Walking
http://codeforces.com/contest/1066/problem/F Maksim walks on a Cartesian plane. Initially, he stands ...
- 分享2D Unity游戏的动画制作经验
作者:Alex Rose Unity近期宣布推出额外的2D游戏支持,加入了Box 2D物理和一个精灵管理器. 但这里还是有些技巧须要牢记在心.逐帧更改图像仅仅是动画制作的冰山一角,若要让你的游戏出色执 ...
- Unity3D初学之2D动画制
作者:Alex Rose Unity最近宣布推出额外的2D游戏支持,添加了Box 2D物理和一个精灵管理器. 但这里还是有些技巧需要牢记在心.逐帧更改图像只是动画制作的冰山一角,若要让你的游戏出色运行 ...
- Unity 2D游戏开发教程之精灵的死亡和重生
Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...
- Unity 2D游戏开发教程之2D游戏的运行效果
Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...
- Unity 2D游戏开发教程之使用脚本实现游戏逻辑
Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...
- Unity 2D游戏开发教程之游戏精灵的开火状态
Unity 2D游戏开发教程之游戏精灵的开火状态 精灵的开火状态 “开火”就是发射子弹的意思,在战争类型的电影或者电视剧中,主角们就爱这么说!本节打算为精灵添加发射子弹的能力.因为本游戏在后面会引入敌 ...
- Unity 2D游戏开发教程之游戏中精灵的跳跃状态
Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...
随机推荐
- Jetson AGX Xavier/Ubuntu安装QT
安装QT命令 sudo apt-get install qt5-default qtcreator -y 如果出现错误:unknow module webenginewidgets serialpor ...
- 【题解】Ehab the Xorcist
\(\color{red}{Link}\) \(\color{blue}{\text{Solution:}}\) 题目要求构造一个最短的序列,使得异或和为\(u\),数列和为\(v\). 那么,因为是 ...
- Xnip Mac上方便好用的截图工具
Xnip Mac上方便好用的截图工具 标注 Xnip 拥有齐全的标注功能,您可以对截取的图片进行标注,在标注的同时还能重新调整截图大小. 查看标注操作 GIF 滚动截图 Xnip 的滚动截图功能可以让 ...
- 【Rsync实战】Rsync 备份的配置与管理
一.Rsync 基本概述 rsync 是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用. rsync 官方地址: rsync ...
- 1.ffmpeg、ffplay、ffprobe命令使用
1.学前知识 1.1视频码率值 码率公式: 码率(kbps)=文件大小(KB)*8/时间(秒) 所以码率和视频文件大小成正比的,不过码率超过一定值后,人眼是看不出效果的. 接下来,我们便先来学习ffm ...
- V4L2摄像头应用编程(转)
Video for Linuxtwo(Video4Linux2)简称V4L2,是V4L的改进版.V4L2是linux操作系统下用于采集图片.视频和音频数据的API接口,配合适当的视频采集设备和相应的驱 ...
- 实验四 用PS制作横幅广告
实验四 用PS制作横幅广告 [实验目的] ⑴.了解广告设计应用 ⑵.学会利用PS制作简单的横幅广告 [实验条件] ⑴.个人计算机一台 ⑵.个人计算机中预装Windows7操作系统和浏览器及Photo ...
- LNOI 2020 退役记
不会爆零了吧嘤嘤嘤 \(Day -7\) 周五正在上化学珂,突然被老师叫出去说省选还有名额,问我报不报名.啊嘞嘞还有一周了告诉我还有名额?经过了激烈的思想斗争,还是决定停课搞一搞,学一回OI好歹看看省 ...
- java中的三大注解
三大注解的作用 Java三大注解分别是@Override @Deprecated @Suppresswarnings @Override 注解表名子类中覆盖了超类中的某个方法,如果写错了覆盖形式,编译 ...
- json expected name at 1 1
问题1:导入新的java项目,报expected name at 1:1错误. 解决方法:勾选Derived复选框.