結果
| 問題 | No.127 門松もどき |
| コンテスト | |
| ユーザー |
hama_du
|
| 提出日時 | 2015-11-24 23:43:43 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 522 ms / 5,000 ms |
| コード長 | 1,153 bytes |
| コンパイル時間 | 11,883 ms |
| コンパイル使用メモリ | 224,408 KB |
| 実行使用メモリ | 148,096 KB |
| 最終ジャッジ日時 | 2024-12-23 22:32:17 |
| 合計ジャッジ時間 | 18,132 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 23 |
ソースコード
package main
import "fmt"
var a []int
var memo [][][]int
var INF = 114514
func main() {
var n int
fmt.Scan(&n)
a = make([]int, n)
for i := 0 ; i < n ; i++ {
fmt.Scan(&a[i])
}
memo = make([][][]int, 2)
for i := 0 ; i <= 1 ; i++ {
memo[i] = make([][]int, n+1)
for j := 0 ; j <= n ; j++ {
memo[i][j] = make([]int, n+1)
for k := 0 ; k <= n ; k++ {
memo[i][j][k] = -1
}
}
}
ans := 0
for i := 0 ; i <= 1 ; i++ {
for j := 0 ; j < n ; j++ {
for k := j ; k < n ; k++ {
res := dfs(i, j, k)
ans = max(ans, res)
}
}
}
fmt.Println(ans)
}
func dfs(flg, left, right int) int {
if (left > right) {
return -INF
} else if (left == right) {
return 1
} else if (memo[flg][left][right] != -1) {
return memo[flg][left][right]
}
res := 0
if flg == 0 {
if a[left] < a[right] {
res = max(res, dfs(1, left, right)+1)
}
res = max(res, dfs(0, left, right-1))
} else {
if a[left] > a[right] {
res = max(res, dfs(0, left, right)+1)
}
res = max(res, dfs(1, left+1, right))
}
memo[flg][left][right] = res
return res
}
func max(a, b int) int {
if a < b {
return b
} else {
return a
}
}
hama_du