有n片荷葉正好在一凸多邊形頂點上
有乙隻小青蛙恰好站在1號荷葉的點
小青蛙可以從一片荷葉上跳到另外任意一片荷葉上
給出n個點的座標n<800
求小青蛙想通過最短的路程遍歷所有的荷葉一次且僅一次的最短路徑。
這題如果沒有凸多邊形的性質,就是裸的tsp問題,資料範圍沒法做的很大,用dp做也最多做到n=20左右,即使用更高階的退火模擬演算法也只能到40左右。
但是這題的點在凸多邊形上,因此有下面的性質:
青蛙遍歷的路徑不會相交。
證明很簡單,畫個圖,利用三角形兩邊之和大於第三邊即可。
結論:青蛙在1號結點只能跳到2號結點或者n號結點。
如果青蛙跳到了2號結點,則問題轉化為:從2出發,遍歷2..n一次僅一次的最短距離。
如果青蛙跳到了n號結點,則問題轉化為:從n出發,遍歷2..n一次僅一次的最短距離。
這實際上是遞迴的思維,把問題轉化為了本質相同但規模更小的子問題;
f(s,l,0)表示從s出發,遍歷s..s+l-1一次且僅一次的最短距離;
f(s, l,1)表示從s+l-1出發,遍歷s..s+l-1一次且僅一次的最短距離。狀態轉移方程為:
f[s][l][0]=min;
f[s][l][1]=min;
動態規劃dp 青蛙的煩惱
青蛙的煩惱 frog 原文 題目描述 池塘中有 n 片荷葉恰好圍成了乙個凸多邊形,有乙隻小青蛙恰好站在 1 號荷葉上,小青蛙想通過 最短的路程遍歷所有的荷葉 經過乙個荷葉一次且僅一次 小青蛙可以從一片荷葉上跳到另外任意一 片荷葉上。輸入格式 第一行為整數 n,荷葉的數量。接下來 n 行,每行兩個實數...
LSGDOJ 1852 青蛙的煩惱 DP
池塘中有n片荷葉恰好圍成了乙個凸多邊形,有乙隻小青蛙恰好站在1號荷葉上,小青蛙想通過最短的路程遍歷所有的荷葉 經過乙個荷葉一次且僅一次 小青蛙可以從一片荷葉上跳到另外任意一片荷葉上。第一行為整數n,荷葉的數量。接下來n行,每行兩個實數,為n個多邊形的頂點座標,按照順時針方向給出。保證不會爆doubl...
青蛙的煩惱
池塘中有 n 片荷葉恰好圍成了乙個凸多邊形,有乙隻小青蛙恰好站在 1號荷葉上,小青蛙想通過最短的路程遍歷所有的荷葉 經過乙個荷葉一次且僅一次 小青蛙可以從一片荷葉上跳到另外任意一片荷葉上。第一行為整數 n 荷葉的數量。接下來 n行,每行兩個實數,為 n 個多邊形的頂點座標,按照順時針方向給出。保證不...