动态规划进阶题目之滑雪
生活随笔
收集整理的這篇文章主要介紹了
动态规划进阶题目之滑雪
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Problem F: 動(dòng)態(tài)規(guī)劃進(jìn)階題目之滑雪
Time Limit:?1 Sec??Memory Limit:?64 MBSubmit:?4??Solved:?3
[Submit][Status][Web Board]
Description
Michael喜歡滑雪百這并不奇怪, 因?yàn)榛┑拇_很刺激??墒菫榱双@得速度,滑的區(qū)域必須向下傾斜,而且當(dāng)你滑到坡底,你不得不再次走上坡或者等待升降機(jī)來(lái)載你。Michael想知道載一個(gè)區(qū)域中最長(zhǎng)的滑坡。區(qū)域由一個(gè)二維數(shù)組給出。數(shù)組的每個(gè)數(shù)字代表點(diǎn)的高度。下面是一個(gè)例子
1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 一個(gè)人可以從某個(gè)點(diǎn)滑向上下左右相鄰四個(gè)點(diǎn)之一,當(dāng)且僅當(dāng)高度減小。在上面的例子中,一條可滑行的滑坡為24-17-16-1。 當(dāng)然25-24-23-...-3-2-1更長(zhǎng)。事實(shí)上,這是最長(zhǎng)的一條。Input
輸入的第一行表示區(qū)域的行數(shù)R和列數(shù)C(1 <= R,C <= 100)。下面是R行,每行有C個(gè)整數(shù),代表高度h,0<=h<=10000。
Output
輸出最長(zhǎng)區(qū)域的長(zhǎng)度。
Sample Input
5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9Sample Output
25這個(gè)題讓我很是糾結(jié),雖然思路簡(jiǎn)單,但是實(shí)現(xiàn)起來(lái)挺麻煩的。
這是我在慕課網(wǎng)上看到的兩種思路。可能是我腦子笨,一直沒(méi)法實(shí)現(xiàn),參考幾個(gè)代碼之后才最終實(shí)現(xiàn),代碼如下: 遞歸型(這種比較簡(jiǎn)單,但可能會(huì)超時(shí)): #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #include<cmath> using namespace std; int h[100][100]; int maxl; void dfs(int i,int j,int s,int x,int y){if(i<x&&j<y&&h[i][j]!=0){if(h[i+1][j]>h[i][j])dfs(i+1,j,s+1,x,y);if(h[i][j+1]>h[i][j])dfs(i,j+1,s+1,x,y);if(h[i-1][j]>h[i][j])dfs(i-1,j,s+1,x,y);if(h[i][j-1]>h[i][j])dfs(i,j-1,s+1,x,y);maxl=max(s,maxl);}}int main() {int x,y;cin>>x>>y;for(int i=0;i<x;i++)for(int j=0;j<y;j++)cin>>h[i][j];maxl=0;for(int i=0;i<x;i++)for(int j=0;j<y;j++)dfs(i,j,1,x,y);cout<<maxl;}人人為我遞推型: #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #include<cmath> using namespace std; int d[110][110],dp[110][110]; struct node{int x,y,h; }a[10010]; int cmp(node a,node b)//按高度排序; {return a.h<b.h; } int main() {int x,y,k=0,maxl;cin>>x>>y;for(int i=0;i<x;i++)for(int j=0;j<y;j++){cin>>d[i][j];dp[i][j]=1;a[k].x=i;a[k].y=j;a[k].h=d[i][j];k++;}sort(a,a+k,cmp);maxl=0;for(int i=0;i<k;i++){if(d[a[i].x][a[i].y]>d[a[i].x+1][a[i].y])dp[a[i].x][a[i].y]=max(dp[a[i].x][a[i].y],dp[a[i].x+1][a[i].y]+1);if(d[a[i].x][a[i].y]>d[a[i].x-1][a[i].y])dp[a[i].x][a[i].y]=max(dp[a[i].x][a[i].y],dp[a[i].x-1][a[i].y]+1);if(d[a[i].x][a[i].y]>d[a[i].x][a[i].y+1])dp[a[i].x][a[i].y]=max(dp[a[i].x][a[i].y],dp[a[i].x][a[i].y+1]+1);if(d[a[i].x][a[i].y]>d[a[i].x][a[i].y-1])dp[a[i].x][a[i].y]=max(dp[a[i].x][a[i].y],dp[a[i].x][a[i].y-1]+1);maxl=max(maxl,dp[a[i].x][a[i].y]);}cout<<maxl; }
總結(jié)
以上是生活随笔為你收集整理的动态规划进阶题目之滑雪的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MYSQL导入数据出现ERROR 104
- 下一篇: 9-资源限制