日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CF1066F Yet another 2D Walking

發布時間:2024/4/15 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。