题解 | #取数游戏#

取数游戏

https://www.nowcoder.com/practice/b467563ebc14407d842f0bb4680f52d8

package main

import (
	"bufio"
	"fmt"
    "os"
)

// dp[i+1][j] = max(dp[i+1][j], dp[i][j] + B[n-j+i]*A[i])
// dp[i][j-1] = max(dp[i][j-1], dp[i][j] + B[n-j+i]*A[j])
func main() {
   var in  = bufio.NewReader(os.Stdin)
   var out  = bufio.NewWriter(os.Stdout)
   defer out.Flush()

    var n int
    fmt.Fscan(in, &n)
    A, B := make([]int, n+1), make([]int, n+1)
    var dp = make([][]int, n+2)
    for i := 1; i<=n; i++ {
        dp[i] = make([]int, n+2)
        fmt.Fscan(in, &A[i])
    }
    dp[n+1] = make([]int, n+2) 
     for i := 1; i<=n; i++ {
        fmt.Fscan(in, &B[i])
     }

    ans := 0
     for i:= 1; i <= n; i++ {
        for j:=n; j>=i; j--{
            dp[i+1][j] = max(dp[i+1][j], dp[i][j] + B[n-j+i]*A[i])
            dp[i][j-1] = max(dp[i][j-1], dp[i][j] + B[n-j+i]*A[j])
        }
        ans = max(ans, dp[i][i-1])
     }

     for i:=1; i <= n; i++ {
        ans = max(ans, dp[i+1][i])
     }
     fmt.Fprintln(out, ans)
}

func max(a, b int) int {
    if a < b {
        return b
    }
    return a
}

全部评论

相关推荐

每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务