時間限制:3000 ms | 記憶體限制:65535 kb
難度:4
鷹最驕傲的就是翱翔,但是鷹們互相都很嫉妒別的鷹比自己飛的快,更嫉妒其他的鷹比自己飛行的有技巧。於是,他們決定舉辦一場比賽,比賽的地方將在乙個迷宮之中。
這些鷹的起始點被設在乙個n*m矩陣的左下角map[1,1]的左下角。終點被設定在矩陣的右上角map[n,m]的右上角,有些map[i,j]是可以從中間穿越的。每乙個方格的邊長都是100公尺。如圖所示:
沒有障礙,也沒有死路。這樣設計主要是為了高速飛行的鷹們不要發現死路來不及調整而發生意外。潘帕斯雄鷹冒著減rp的危險從比賽承辦方戒備森嚴的基地中偷來了施工的地圖。但是問題也隨之而來,他必須在比賽開始之前把地圖的每一條路都搞清楚,從中找到一條到達終點最近的路。(哈哈,笨鳥不先飛也要拿冠軍)但是此鷹是前無古鷹,後無來鷹的吃菜長大的鷹–菜鳥。他自己沒有辦法得出最短的路徑,於是緊急之下找到了學oi的你,希望找到你的幫助。
本題有多組資料。以eof為輸入結束的標誌。
每組測試資料的首行為n,m(0
僅一行,1,1–>n,m的最短路徑的長度,四捨五入保留到整數即可
樣例輸入
3 2樣例輸出 剛開始看到題目就想著開乙個陣列模擬過程,每個點使用map先判斷是否可以穿越,然後在下方右方和對角中找到最小的這樣重點一定是最小的。但是看到資料範圍1073 1 1
3 2
1 2
無法建正常表就用到lcs對空間的優化,由於只用到了當前行和上一行,所以只用兩行來儲存狀態,自認為可以過了結果最後還是超記憶體,看來別人的思路才發現是路徑是可以直接算出來,只需要找到有多少條遞增的特殊路段序列。
計算方法,沒有特殊路段時道路要經過的路為(n+m)段,一條特殊路段可以減少(2−
2√)*100的距離,所以只需要找出最長遞增特殊路段序列最大長度max,就可以算出距離為((
n+m)
−(2−
2√)∗
max)
∗100
。這回也算是乙個教訓,拿到題目不要想到方法就立馬做還要根據資料範圍計算一下可行性,否則都是無用功!
廢話不多說上**
#include //萬能標頭檔案
#define q2 1.414213562373095 //sqrt(2)的值
using
namespace
std;
struct node
data[1005];//儲存特殊路段座標
int cmp(node a,node b)//自定義排序規則,這個先排x還是先排y效果一樣
sort(data,data+k,cmp);//排序
for(int i=1; ifor(int j=0; jif(data[i].x>data[j].x&&data[i].y>data[j].y&&dp[j]+1>dp[i])
//判斷是否更新dp[i]
if(ma//找出最大值
ma=dp[i];}}
printf("%.0lf\n",(m+n-2*ma)*100.0+q2*ma*100);
}return
0;}
紀念一下我那個超記憶體的**畢竟也寫了挺久的
#include
#define n 1000005
#define q2 1.414213562373095
using
namespace
std;
double dp[2][n];
struct zb
double min(double a,double b,double c)
int main()
dp[0][0]=0;
dp[1][0]=0;
mapint>mp;
int k;scanf("%d",&k);
while(k--)
for(int i=0;i<=m;i++)
for(int j=0;j<=n;j++)
printf("%.0lf\n",dp[m%2][n]*100);
}return
0;}
NYOJ 195飛翔 動態規劃
描述 鷹最驕傲的就是翱翔,但是鷹們互相都很嫉妒別的鷹比自己飛的快,更嫉妒其他的鷹比自己飛行的有技巧。於是,他們決定舉辦一場比賽,比賽的地方將在乙個迷宮之中。這些鷹的起始點被設在乙個n m矩陣的左下角map 1,1 的左下角。終點被設定在矩陣的右上角map n,m 的右上角,有些map i,j 是可以...
nyoj195飛翔(動態規劃)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 鷹最驕傲的就是翱翔,但是鷹們互相都很嫉妒別的鷹比自己飛的快,更嫉妒其他的鷹比自己飛行的有技巧。於是,他們決定舉辦一場比賽,比賽的地方將在乙個迷宮之中。這些鷹的起始點被設在乙個n m矩陣的左下角map 1,1 的左下角。終點被設定...
nyoj195 飛翔 動態規劃
鷹最驕傲的就是翱翔,但是鷹們互相都很嫉妒別的鷹比自己飛的快,更嫉妒其他的鷹比自己飛行的有技巧。於是,他們決定舉辦一場比賽,比賽的地方將在乙個迷宮之中。這些鷹的起始點被設在乙個n m矩陣的左下角map 1,1 的左下角。終點被設定在矩陣的右上角map n,m 的右上角,有些map i,j 是可以從中間...