結果
問題 | 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); }