結果

問題 No.127 門松もどき
ユーザー HachimoriHachimori
提出日時 2015-01-14 00:19:57
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 290 ms / 5,000 ms
コード長 954 bytes
コンパイル時間 622 ms
コンパイル使用メモリ 59,400 KB
実行使用メモリ 74,316 KB
最終ジャッジ日時 2023-08-25 13:40:22
合計ジャッジ時間 4,947 ms
ジャッジサーバーID
(参考情報)
judge13 / judge11
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 21 ms
73,888 KB
testcase_01 AC 21 ms
73,888 KB
testcase_02 AC 21 ms
73,888 KB
testcase_03 AC 22 ms
74,112 KB
testcase_04 AC 290 ms
74,128 KB
testcase_05 AC 21 ms
73,900 KB
testcase_06 AC 31 ms
74,064 KB
testcase_07 AC 21 ms
74,068 KB
testcase_08 AC 21 ms
73,956 KB
testcase_09 AC 20 ms
73,896 KB
testcase_10 AC 21 ms
73,892 KB
testcase_11 AC 22 ms
73,972 KB
testcase_12 AC 134 ms
74,244 KB
testcase_13 AC 178 ms
74,092 KB
testcase_14 AC 161 ms
74,316 KB
testcase_15 AC 225 ms
74,240 KB
testcase_16 AC 146 ms
74,260 KB
testcase_17 AC 142 ms
74,180 KB
testcase_18 AC 127 ms
74,216 KB
testcase_19 AC 81 ms
74,032 KB
testcase_20 AC 81 ms
74,052 KB
testcase_21 AC 48 ms
74,224 KB
testcase_22 AC 284 ms
74,136 KB
testcase_23 AC 227 ms
74,196 KB
testcase_24 AC 221 ms
74,164 KB
testcase_25 AC 264 ms
74,120 KB
testcase_26 AC 127 ms
74,052 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int BUF = 3005;


int N, A[BUF];

void read() {
    cin >> N;
    N += 2;
    A[0] = A[N - 1] = -1;
    for (int i = 1; i < N - 1; ++i)
        cin >> A[i];
}


int rec(bool doLeft, int L, int R, int dp[2][BUF][BUF]) {
    if (L > R) return 0;
    
    int &ret = dp[doLeft][L][R];
    if (ret != -1) return ret;
    
    ret = 0;
    
    if (doLeft) {
        if (A[L] > A[R])
            ret = max(ret, rec(!doLeft, L, R, dp) + 1);
        ret = max(ret, rec(doLeft, L + 1, R, dp));
    }
    else {
        if (A[L] < A[R])
            ret = max(ret, rec(!doLeft, L, R, dp) + 1);
        ret = max(ret, rec(doLeft, L, R - 1, dp));
    }
    
    return ret;
}


void work() {
    static int dp[2][BUF][BUF];
    memset(dp, -1, sizeof(dp));
    cout << max(rec(0, 0, N - 2, dp), rec(1, 1, N - 1, dp)) << endl;
}


int main() {
    read();
    work();
    return 0;
}
0