結果
| 問題 |
No.209 Longest Mountain Subsequence
|
| コンテスト | |
| ユーザー |
btk
|
| 提出日時 | 2015-05-15 23:09:09 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 133 ms / 2,000 ms |
| コード長 | 1,336 bytes |
| コンパイル時間 | 705 ms |
| コンパイル使用メモリ | 87,756 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-06 04:13:59 |
| 合計ジャッジ時間 | 1,374 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 6 |
ソースコード
#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<list>
#include<algorithm>
#include<utility>
#include<complex>
#include<functional>
using namespace std;
#define LL long long
LL dpup[101][101];
LL dpdown[101][101];
LL A[101];
const LL INF = 1e9+7;
int main(void){
int T,N;
cin >> T;
while (T--){
cin >> N;
for (int i = 0; i < N; i++){
cin >> A[i];
dpup[i][0] = dpdown[i][0] = 0;
for (int j = 1; j <= N; j++){
dpup[i][j] = dpdown[i][j] = INF;
}
}
for (int i = 1; i < N; i++){
for (int L = 1; L <= N; L++){
for (int j = 0; j < i; j++){
if (A[i]>A[j] && dpup[j][L - 1] < (A[i] - A[j]))
dpup[i][L] = min(dpup[i][L], A[i] - A[j]);
}
}
}
for (int i = N-2; i >= 0; i--){
for (int L = 1; L <= N; L++){
for (int j = N-1; j > i; j--){
if (A[i]>A[j] && dpdown[j][L - 1] < (A[i] - A[j]))
dpdown[i][L] = min(dpdown[i][L], A[i] - A[j]);
}
}
}
int res = 0;
for (int i = 0; i < N; i++){
int l = 0, r = 0;
for (int L = 0; L < N; L++){
if (dpup[i][L] < INF)l = L;
if (dpdown[i][L] < INF)r = L;
}
res = max(res,l + r + 1);
}
cout << res << endl;
}
return(0);
}
btk