怪盜基德的滑翔翼 題解

来源: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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...