結果
問題 |
No.127 門松もどき
|
ユーザー |
|
提出日時 | 2025-09-26 11:31:38 |
言語 | D (dmd 2.109.1) |
結果 |
AC
|
実行時間 | 131 ms / 5,000 ms |
コード長 | 856 bytes |
コンパイル時間 | 6,311 ms |
コンパイル使用メモリ | 167,500 KB |
実行使用メモリ | 75,572 KB |
最終ジャッジ日時 | 2025-09-26 11:31:48 |
合計ジャッジ時間 | 9,637 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 23 |
ソースコード
module main; // https://kmjp.hatenablog.jp/entry/2015/01/14/0900 より // 動的計画法 import std; // aとbを比較してbの方が大きいならばaの値をbに更新する void chMax(T)(ref T a, in T b) { if (a < b) a = b; } void main() { // 入力 int N = readln.chomp.to!int; auto A = readln.split.to!(int[]); // 答えの計算 int ma = 1; auto dp = new int[][][](2, N + 2, N + 2); foreach (i; 0 .. N) dp[0][i][i] = dp[1][i][i] = 1; foreach (i; 1 .. N + 1) { foreach (x; 0 .. N - i) { chMax(dp[1][x][x + i], dp[1][x][x + i - 1]); chMax(dp[0][x][x + i], dp[0][x + 1][x + i]); if (A[x] < A[x + i]) chMax(dp[1][x][x + i], dp[0][x + 1][x + i] + 1); if (A[x] > A[x + i]) chMax(dp[0][x][x + i], dp[1][x][x + i - 1] + 1); ma = max(ma, dp[1][x][x + i], dp[0][x][x + i]); } } // 答えの出力 writeln(ma); }