怪盗基德的滑翔翼(信息学奥赛一本通-T286)
【題目描述】
怪盜基德是一個充滿傳奇色彩的怪盜,專門以珠寶為目標的超級盜竊犯。而他最為突出的地方,就是他每次都能逃脫中村警部的重重圍堵,而這也很大程度上是多虧了他隨身攜帶的便于操作的滑翔翼。
有一天,怪盜基德像往常一樣偷走了一顆珍貴的鉆石,不料卻被柯南小朋友識破了偽裝,而他的滑翔翼的動力裝置也被柯南踢出的足球破壞了。不得已,怪盜基德只能操作受損的滑翔翼逃脫。
假設城市中一共有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
【源程序】
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 1001 #define MOD 2520 #define E 1e-12 using namespace std; int a[N],f[N]; int main() {int t;cin>>t;while(t--){int n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];int maxx1=-INF,maxx2=-INF;for(int i=1;i<=n;i++){f[i]=1;for(int j=1;j<i;j++)if(a[j]>a[i]&&f[j]+1>f[i])f[i]=f[j]+1;maxx1=max(maxx1,f[i]);}for(int i=n;i>=1;i--){f[i]=1;for(int j=n;j>i;j--)if(a[j]>a[i]&&f[j]+1>f[i])f[i]=f[j]+1;maxx2=max(maxx2,f[i]);}int res=max(maxx1,maxx2);cout<<res<<endl;}return 0; }?
總結
以上是生活随笔為你收集整理的怪盗基德的滑翔翼(信息学奥赛一本通-T286)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 树形结构 —— 并查集
- 下一篇: 二分法求函数的零点(信息学奥赛一本通-T
