怪盜基德的滑翔翼 題解

来源:http://www.cnblogs.com/NOIPer2015/archive/2016/02/17/5196227.html
-Advertisement-
Play Games

怪盜基德的滑翔翼 總時間限制: 1000ms 記憶體限制: 65536kB描述 怪盜基德是一個充滿傳奇色彩的怪盜,專門以珠寶為目標的超級盜竊犯。而他最為突出的地方,就是他每次都能逃脫中村警部的重重圍堵,而這也很大程度上是多虧了他隨身攜帶的便於操作的滑翔翼。 有一天,怪盜基德像往常一樣偷走了一顆珍貴的鑽


怪盜基德的滑翔翼

總時間限制: 
1000ms
 
記憶體限制: 
65536kB
描述

 

怪盜基德是一個充滿傳奇色彩的怪盜,專門以珠寶為目標的超級盜竊犯。而他最為突出的地方,就是他每次都能逃脫中村警部的重重圍堵,而這也很大程度上是多虧了他隨身攜帶的便於操作的滑翔翼。

有一天,怪盜基德像往常一樣偷走了一顆珍貴的鑽石,不料卻被柯南小朋友識破了偽裝,而他的滑翔翼的動力裝置也被柯南踢出的足球破壞了。不得已,怪盜基德只能操作受損的滑翔翼逃脫。

假設城市中一共有N幢建築排成一條線,每幢建築的高度各不相同。初始時,怪盜基德可以在任何一幢建築的頂端。他可以選擇一個方向逃跑,但是不能中途改變方向(因為中森警部會在後面追擊)。因為滑翔翼動力裝置受損,他只能往下滑行(即:只能從較高的建築滑翔到較低的建築)。他希望儘可能多地經過不同建築的頂部,這樣可以減緩下降時的衝擊力,減少受傷的可能性。請問,他最多可以經過多少幢不同建築的頂部(包含初始時的建築)?

 

輸入
輸入數據第一行是一個整數K(K < 100),代表有K組測試數據。
每組測試數據包含兩行:第一行是一個整數N(N < 100),代表有N幢建築。第二行包含N個不同的整數,每一個對應一幢建築的高度h(0 < h < 10000),按照建築的排列順序給出。
輸出
對於每一組測試數據,輸出一行,包含一個整數,代表怪盜基德最多可以經過的建築數量。
樣例輸入
3
8
300 207 155 299 298 170 158 65
8
65 158 170 298 299 155 207 300
10
2 1 3 4 5 6 7 8 9 10
樣例輸出
6
6
9

  當我們看到題目之後,第一個反應就是最長下降子序列,事實上,這確實是最長下降子序列,但是,我們必須要註意到一句話:初始時,怪盜基德可以在任何一幢建築的頂端。他可以選擇一個方向逃跑,但是不能中途改變方向(因為中森警部會在後面追擊)。咦?這是什麼意思,未必還是雙向的啊!嗯,想到這裡,你就已經把大概的演算法給設計出來了,沒錯,就是雙向最長下降子序列...(上述名字,純屬自創,如有雷同,純屬巧合)。那麼接下來就是代碼實現的問題了。首先就是雙向存儲的問題,我們可以開一個a[2][101]來記錄高度,其中,a[1][i]代表著從左往右走第i個建築的高度,a[2][i]代表從右往左第i個建築的高度。相同的,我們設置f[2][101]來記錄從左往右(從右往左)數飛到第i個建築時最多經過的建築個數,然後在將f數組掃一遍,找出最大值,就可以了。接下來就是代碼了。
 1 program NOI4977;
 2 var
 3    f:array[1..2,0..101] of longint;
 4    a:array[1..2,0..101] of longint;
 5    i,j,k,n,m,max:longint;
 6 begin
 7      readln(m);
 8      for k:=1 to m do
 9      begin
10           fillchar(f,sizeof(f),0);
11           readln(n);
12           for i:=1 to n do
13               begin
14                    read(a[1,i]);
15                    a[2,n-i+1]:=a[1,i];
16               end;
17           f[1,n]:=1;
18           f[2,n]:=1;
19           for i:=n-1 downto 1 do
20               begin
21                    max:=0;
22                    for j:=i+1 to n do
23                        if (a[1,i]>a[1,j]) and (f[1,j]>max) then
24                           max:=f[1,j];
25                    f[1,i]:=max+1;
26               end;
27           for i:=n-1 downto 1 do
28               begin
29                    max:=0;
30                    for j:=i+1 to n do
31                        if (a[2,i]>a[2,j]) and (f[2,j]>max) then
32                           max:=f[2,j];
33                    f[2,i]:=max+1;
34               end;
35           max:=0;
36           for i:=1 to n do
37               if (max<f[1,i]) then
38                  max:=f[1,i];
39           for i:=1 to n do
40               if (max<f[2,i]) then
41                  max:=f[2,i];
42           writeln(max);
43      end;
44 end.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 【問】 假設有一個類庫文件LibraryA,其中有一個ClassA,該類的AssemblyName為“LibraryA”(編譯後的文件是LibraryA.dll)。另外有一個LibraryB.dll類庫文件,其中AssemblyName和其命名空間一樣,並且其引用LibraryA.dll。它們代碼如
  • 一、前言 在關於技術上的學習,常常有這樣那樣的計劃,而最終一個都沒有真正的落實。零散的學習,終究需要系統總結,才能使自己有所沉澱。從畢業至今,我一直在忙碌,為公司付出自己的很多很多,卻只不過是一隻只會拉磨的驢: 1、只做一樣的事情(聽從領導的安排且做好,從不質疑,殊不知領導的規劃能力很弱。) 2、只
  • 1.ViewData:可存放任意類型數據,使用時需要轉換,ViewData[“Info”]="hello",適合傳遞單個數據; 2.ViewBag:是對ViewData的封裝,可讀取ViewData保存的數據,反之亦然,ViewBag.stu=objStudent; 3.TempData:可跨視圖,
  • 1.視圖引擎:把視圖解析成瀏覽器可執行的html代碼 2.aspx視圖: <%=表達式%>: <% C#代碼段 %>: 3.razor視圖: @(表達式):@ViewData["name"],如果@後跟常量,必須用括弧括起來:@(“hello”) @{C#代碼段}:@{ if(a>b) { retu
  • 對象為null時調用給對象的屬性或方法 “未將對象引用到實例”是很多像我一樣的初學者經常遇到的一個問題,常常令人煩惱不已,那麼這個問題是怎麼發生的呢?先給大家看一張圖,我們從這張圖入手來分析這個錯誤造成的原因。 可能很多人看到這樣的代碼會覺得可笑:”能寫出這樣的代碼,看來此人的智商已“超越”人類的範...
  • 先鋪墊一些基礎知識 在 .net 4.5中出現了 Async Await關鍵字,配合之前版本的Task 來使得開發非同步程式更為簡單易控。 在使用它們之前 我們先關心下 為什麼要使用它們。好比 一個人做幾件事,那他得一件一件的做完,而如果添加幾個人手一起幫著做 很顯然任務會更快的做好。這就是並行的粗淺
  • 創建: 使用setcookie( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $ht
  • 在多線程訪問共用對象和數據時候大致可以分為兩大類。 1:如果每個線程執行的代碼相同,可以使用同一個runnable對象,這個runnable對象中有那個共用對象。如:買票系統。 1 public class MulteThreadlShareData { 2 public static void m
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...