結果
| 問題 | 
                            No.209 Longest Mountain Subsequence
                             | 
                    
| コンテスト | |
| ユーザー | 
                             kakira9618
                         | 
                    
| 提出日時 | 2015-05-15 23:28:38 | 
| 言語 | C++11(廃止可能性あり)  (gcc 13.3.0)  | 
                    
| 結果 | 
                             
                                WA
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 2,848 bytes | 
| コンパイル時間 | 792 ms | 
| コンパイル使用メモリ | 93,084 KB | 
| 実行使用メモリ | 6,944 KB | 
| 最終ジャッジ日時 | 2024-07-06 04:17:46 | 
| 合計ジャッジ時間 | 1,336 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge1 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | WA * 6 | 
ソースコード
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <vector>
#include <complex>
#include <cstdlib>
#include <cstring>
#include <numeric>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <functional>
  
#define mp       make_pair
#define pb       push_back
#define all(x)   (x).begin(),(x).end()
#define rep(i,n) for(int i=0;i<(n);i++)
  
using namespace std;
  
typedef    long long          ll;
typedef    unsigned long long ull;
typedef    vector<bool>       vb;
typedef    vector<int>        vi;
typedef    vector<vb>         vvb;
typedef    vector<vi>         vvi;
typedef    pair<int,int>      pii;
  
const int INF=1<<29;
const double EPS=1e-9;
  
const int dx[]={1,0,-1,0,1,1,-1,-1},dy[]={0,-1,0,1,1,-1,-1,1};
int main() {
    int T;
    cin >> T;
    for (int testcase = 0; testcase < T; testcase++) {
        int N;
        cin >> N;
        std::vector<int> v;
        for (int i = 0; i < N; i++) {
            int temp;
            cin >> temp;
            v.push_back(temp);
        }
        if (v.size() <= 2) {
            if (v.size() == 2 && v[0] == v[1]) {
                cout << 1 << endl;
                return 0;
            }
            cout << v.size() << endl;
            return 0;
        }
        std::vector<vector<vector<int> > > dp(N, vector<vector<int> >(N, vector<int>(2, 0)));
        
        for (int i = 0; i < N - 2; i++) {
            for (int j = i + 1; j < N - 1; j++) {
                for (int k = j + 1; k < N; k++) {
                    if (v[j] - v[i] > 0) {
                        if (v[j] - v[i] < v[k] - v[j]) {
                            //(i, j, 0) => (j, k, 0)
                            dp[j][k][0] = max(dp[j][k][0], dp[i][j][0] + 1);
                        } else if (v[j] - v[k] > 0) {
                            //(i, j, 0) => (j, k, 1)
                            dp[j][k][1] = max(dp[j][k][1], dp[i][j][0] + 1);
                        }
                    } else if (v[j] - v[i] < 0){
                        if (abs(v[i] - v[j]) > abs(v[k] - v[j])) {
                            
                            //(i, j, 1) => (j, k, 1)
                            dp[j][k][1] = max(dp[j][k][1], dp[i][j][1] + 1);
                        }
                    }
                }
            }
        }
        int ans = 0;
        for (int k = 0; k < 2; k++) {
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                   //cout << dp[i][j][k] << " ";
                    ans = max(ans, dp[i][j][k]);
                }
                //cout << endl;
            }
            //cout << endl << endl;
        }
        //cout << endl << endl << endl;
        
        cout << ans + 2 << endl;
    }
    return 0;
}
            
            
            
        
            
kakira9618