動態規劃進階題目之滑雪

Problem F: 動態規劃進階題目之滑雪

Time Limit:?1 Sec??Memory Limit:?64 MB
Submit:?4??Solved:?3
[Submit][Status][Web Board]

Description

Michael喜歡滑雪百這并不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長的滑坡。區域由一個二維數組給出。數組的每個數字代表點的高度。下面是一個例子

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
一個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小。在上面的例子中,一條可滑行的滑坡為24-17-16-1。
當然25-24-23-...-3-2-1更長。事實上,這是最長的一條。

Input

輸入的第一行表示區域的行數R和列數C(1 <= R,C <= 100)。下面是R行,每行有C個整數,代表高度h,0<=h<=10000。

Output

輸出最長區域的長度。

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 9

Sample Output

25

這個題讓我很是糾結,雖然思路簡單,但是實現起來挺麻煩的。



這是我在慕課網上看到的兩種思路。可能是我腦子笨,一直沒法實現,參考幾個代碼之后才最終實現,代碼如下:
遞歸型(這種比較簡單,但可能會超時):
#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;
}




本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536193.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536193.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536193.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

修改win10我的文檔下載等移動別處

win10移動我的文檔&#xff0c;下載等到其他盤符辦法 解決辦法 1.選擇我的文檔&#xff0c;鼠標右鍵選擇屬性&#xff0c;在工具欄選擇位置&#xff0c;然后選擇想移動到哪里的盤符即可&#xff0c;如圖&#xff1a;2.操作完后選擇應用->確定&#xff0c;就這么簡單。

神奇的口袋

2755:神奇的口袋查看 提交 統計 提示 提問總時間限制: 10000ms 內存限制: 65536kB描述有一個神奇的口袋&#xff0c;總的容積是40&#xff0c;用這個口袋可以變出一些物品&#xff0c;這些物品的總體積必須是40。John現在有n個想要得到的物品&#xff0c;每個物品的體積分別是a…

Ubuntu16.04LTS修改開機動畫

ubuntu16.04LTS修改開機動畫 ubuntu自帶的開機動畫實在是很不滿美觀&#xff0c;但是又不想重寫&#xff0c;怎么辦&#xff1f; 接下來交你們一招。 1.開機動畫文件夾 Ubuntu14.04的開機動畫在/usr/share/plymouth文件夾內 2.下載開機動畫 兩種方式&#xff1a; 從Ubun…

Qt的Xml操作QDomDocument

Qt的Xml操作QDomDocument Qt對于Xml的支持是很好的&#xff0c;一些我們需要的操作應有盡有&#xff0c;下面簡單介紹一下怎樣使用。主要有以下幾點使用&#xff1a; 寫xml到文件讀xml添加節點到xml刪除xml中某節點信息修改xml中某節點信息 準備工作 .pro加入QT xml需要in…

2815:城堡問題

2815:城堡問題 查看提交統計提示提問 總時間限制: 1000ms 內存限制: 65536kB描述1 2 3 4 5 6 7 #############################1 # | # | # | | ######---#####---#---#####---#2 # # | # # # # ##---#####---#####---#####---#3 # …

冒泡排序法函數

文章目錄冒泡排序法的函數實現使用教程冒泡排序法的函數實現 話不多說上代碼&#xff0c;拿去直接用。 // 冒泡排序函數 /* * brief sort * param array為數組名稱&#xff0c;length為數組的長度&#xff0c;order為1或0,1代表從小到大排序 * 0代表從大到小排序…

boost序列化(Serialization)

本文章轉載自 http://m.blog.csdn.net/zj510/article/details/8105408 程序開發中&#xff0c;序列化是經常需要用到的。像一些相對高級語言&#xff0c;比如JAVA, C#都已經很好的支持了序列化&#xff0c;那么C呢&#xff1f;當然一個比較好的選擇就是用Boost&#xff0c;這個…

java基礎經典練習題

【程序1】 題目&#xff1a;古典問題&#xff1a;有一對兔子&#xff0c;從出生后第3個月起每個月都生一對兔子&#xff0c;小兔子長到第三個月后每個月又生一對兔子&#xff0c;假如兔子都不死&#xff0c;問每個月的兔子總數為多少&#xff1f; //這是一個菲波拉契數列問題 p…

ubuntu下wps不能輸入中文

ubuntu下wps不能輸入中文 原因是因為fcitx環境的原因&#xff0c;想了解fcitx的可以看這篇文章&#xff0c;鏈接。 使用腳本解決 將下面的腳本復制到新建的文件中&#xff0c;chmod加權限&#xff0c;然后執行即可。 #! /bin/bash #--------------------------------------…

常見的幾種內排序算法以及實現(C語言)(轉)

所有未排序的數組是經過檢查合法的主要的內排序包括冒泡、插入、希爾、堆排序、歸并、快速、桶排序等其C語言實現的源文件下載地址&#xff1a;http://download.csdn.net/detail/mcu_tian/9530227冒泡排序冒泡排序應該是排序中最簡單的算法了主要思路如下&#xff1a;1&#xf…

常見編程命名縮寫

命名縮寫 通用縮寫翻譯控件縮寫翻譯addressaddr地址calendarcdr日歷applicationapp應用程序messageDialogmsgdlg消息框asynchronizationasyn異步drawerdrw抽屜averageavg平均數buttonGroupbtngrp按鈕分組bitmapbmp位圖checkBoxchk復選框bufferbuf緩沖區containercntr容器chara…

funCode課程實訓(C++ )

funcode是一個簡單的游戲制作引擎&#xff0c;適合c初學者操作&#xff0c;可以幫助初學者更好的了解c環境&#xff0c;以及各種函數的實現&#xff0c;本學期我們用funcode作為C最后的課程設計&#xff0c;所以我就使用funcode制作一個打地鼠的小游戲。以下是對這個小程序的描…

Nodejs,Npm,React安裝教程

React安裝 1.下載node.js安裝包 下載二進制包 選擇比較穩定的版本進行安裝&#xff0c;v8.9 2.安裝 直接把文件解壓復制到某個目錄下&#xff0c; sudo cp -r node-v8.9.0 /opt/node #你下載的版本sudo touch /etc/profile.d/node.sh #新建一個腳本文件sudo gedit /etc/…

Ubuntu下的提示信息彩色顯示

【問題】 雖然已經折騰過了&#xff1a; 【已解決】Ubuntu中讓終端只顯示當前路徑&#xff0c;而不顯示絕對路徑 但是&#xff0c;終端中的prompt提示信息&#xff0c;不是彩色的&#xff0c;導致的結果是&#xff1a; 當終端中輸出信息很多時&#xff1a; 【已解決】Ubun…

hustoj的搭建

最近開始接觸服務器之類的&#xff0c;就自己搭建一個hustoj的服務器&#xff0c;hustoj系統的搭建在網上已經很完善了&#xff0c;這里我就簡單的說一下&#xff0c;作為自己的學習筆記。 安裝主要環境&#xff0c;Apache2&#xff0c;MySQL&#xff0c;php5和PHPmyadmin。 …

Shell字符串操作集合

字符操作字符串的長度獲取字符串中某些字符的個數統計單詞的個數bash提供的數組數據結構它是以數字為下標的和C語言從0開始的下一樣awk里面的數組取子串匹配求子串sed有按行打印的功能記得用tr把空格換為行號tr來取子串head和tail查詢字串子串替換tac 會將文本的內容倒置顯示正…

百練4982 踩方格

總時間限制: 1000ms 內存限制: 65536kB描述有一個方格矩陣&#xff0c;矩陣邊界在無窮遠處。我們做如下假設&#xff1a;a. 每走一步時&#xff0c;只能從當前方格移動一格&#xff0c;走到某個相鄰的方格上&#xff1b;b. 走過的格子立即塌陷無法再走第二次&#xff1b;…

Qt自定義QML模塊

自定義QML模塊 含義為將常用風格的Button&#xff0c;Text,RadioButton,或者自定義的控件作為一個控件進行使用&#xff0c;節省代碼。 優點&#xff1a; 代碼簡潔&#xff0c;減少重復代碼自定義的控件進行封裝重復使用可以與QML自帶的庫區別開來優化項目結構 一、創建模塊…

POJ3984 迷宮問題【BFS】

好長時間沒有敲過代碼了&#xff0c;感覺之前學過的都忘了&#xff0c;趁著這個暑假&#xff0c;打算把之前學習的東西都復習一下&#xff0c;當然得慢慢來&#xff0c;畢竟好長時間不敲代碼了&#xff0c;怎么著都有些生疏&#xff0c;再加上之前學的也不咋地&#xff0c;相當…

宏定義基本用法

宏定義 不帶參數 宏定義又稱為宏代換、宏替換&#xff0c;簡稱“宏”。 格式&#xff1a; #define 標識符 字符串其中的標識符就是所謂的符號常量&#xff0c;也稱為“宏名”。 預處理&#xff08;預編譯&#xff09;工作也叫做宏展開&#xff1a;將宏名替換為字符串。 掌…