題目描述
在zju,每個學生都被要求課外跑步,並且需要跑夠一定的距離 k
'>k
,否則體育課會掛科。
zju有4個打卡點,分別標記為 p1,
p2,p
3,p4
'>p1,p2,p3,p4
。每次你到達乙個打卡點,你只需要刷一下卡,系統會自動計算這個打卡點和上乙個打卡點的距離,並將它計入你的已跑距離。
系統把這4個打卡點看成乙個環。 p
1'>p1
與 p2
'>p2
相鄰、 p
2'>p2
與 p3
'>p3
相鄰、 p
3'>p3
與 p4
'>p4
相鄰、 p
4'>p4
與 p1
'>p1
相鄰。當你到達打卡點 p
i'>pi
時,你只能跑到與該打卡點相鄰的打卡點打卡。
打卡點 p
2'>p2
是離宿舍最近的乙個打卡點。cjb總是從 p
2'>p2
出發,並回到 p
2'>p2
。因為cjb很圓,所以他希望他跑的距離不少於 k
'>k
,但又要盡量小。
p
2'>題解p2
'>取 d=min(dis1-2,dis2-3),那麼對於每種方案,均可以通過往返跑 d 這條邊使得距離增加 2dp2
'>令 w=2d,dp[i][j] 表示從起點出發到達 i ,距離模 w 為 j 時的最短路,這個由 spfa 可求得,時間複雜度為 o(w logw)p2
'>最後,我們由 dp[p2][j] 即可求出最優路線(具體見圖)p2
'>
#include#include#include
#include
using
namespace
std;
typedef
long
long
ll;int t,w,d[4],inque[4][60001
];ll k,dp[
4][60001
];struct que;
queue
q;int
main());
inque[
1][0]=1
;
while(!q.empty()));
inque[nxt][(m+d[p])%w]=1
; }
}if(dp[p][m]+d[pre]w]));
inque[pre][(m+d[pre])%w]=1
; }}}
while(dp[1][k%w]>k)k++;
printf(
"%lld\n
",k);
}return0;
}
多校第4場1012
理解題意以後會發現時比較簡單的線段樹,理解題意以後首先應該想到乙個貪心,就是再尋找最終答案的第i個數時,餓哦們要盡量使這個數盡可能大。那麼我們找 1,pos i 1 這個區間中已經組隊的位置的最大值,記為l,然後找 l 1pos i 1 之間未被找過的最大的數。這裡組隊的意思是可以詳見程式,並不是被...
多校第4場1012
理解題意以後會發現時比較簡單的線段樹,理解題意以後首先應該想到乙個貪心,就是再尋找最終答案的第i個數時,餓哦們要盡量使這個數盡可能大。那麼我們找 1,pos i 1 這個區間中已經組隊的位置的最大值,記為l,然後找 l 1pos i 1 之間未被找過的最大的數。這裡組隊的意思是可以詳見程式,並不是被...
多校第9場
這道題挺水,只是要耐心的打表,我一開始只打了一半就不想做了,也是因為我的方法太麻煩了,把x,y座標分開存,處理的資料量差不多增加了一倍。這題有一點注意 題目中並沒有限制字串的長度,所以char陣列盡量開大些。下面是賽後ac的 include include include include inclu...