511253 [sage]
>>462 go 動的計画法
package main
import ( "fmt" )
var m [][]int
func v(t int, p int) int {
if 1 <= p && p <= 10 { return m[t][p] }; return 0 }
func max3(n1 int, n2 int, n3 int) int {
n := n1; if n < n2 { n = n2 }; if n < n3 { n = n3 }; return n }
func main() {
var n, t, p, i, T int
fmt.Scan(&n)
var a [][]int = make([][]int, n)
for i=0; i<n; i++ {
fmt.Scanf("%d %d", &t, &p)
a[i] = []int{ t, p }
if t > T { T = t }
}
m = make([][]int, T+1)
for t=0; t<=T; t++ {
m[t] = make([]int, 11)
for p=1; p<=10; p++ { m[t][p] = 0 }
}
for i=0; i<n; i++ { m[a[i][0]][a[i][1]] = 1 }
for t=T-1; 0<=t; t-- {
for p=1; p<=10; p++ {
m[t][p] += max3(v(t+1, p-1), v(t+1, p), v(t+1, p+1))
}
}
fmt.Println(m[0][1])
}
package main
import ( "fmt" )
var m [][]int
func v(t int, p int) int {
if 1 <= p && p <= 10 { return m[t][p] }; return 0 }
func max3(n1 int, n2 int, n3 int) int {
n := n1; if n < n2 { n = n2 }; if n < n3 { n = n3 }; return n }
func main() {
var n, t, p, i, T int
fmt.Scan(&n)
var a [][]int = make([][]int, n)
for i=0; i<n; i++ {
fmt.Scanf("%d %d", &t, &p)
a[i] = []int{ t, p }
if t > T { T = t }
}
m = make([][]int, T+1)
for t=0; t<=T; t++ {
m[t] = make([]int, 11)
for p=1; p<=10; p++ { m[t][p] = 0 }
}
for i=0; i<n; i++ { m[a[i][0]][a[i][1]] = 1 }
for t=T-1; 0<=t; t-- {
for p=1; p<=10; p++ {
m[t][p] += max3(v(t+1, p-1), v(t+1, p), v(t+1, p+1))
}
}
fmt.Println(m[0][1])
}
2020/09/08(火)23:15:40.17(TMzoRSJV.net)