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 }