Problem10979--最大贡献

10979: 最大贡献

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 512 MiB

Description

将一个长度为 $N$ 的序列 A[1], A[2], ..., A[N] 划分成若干个连续段(也可以不进行划分,此时会将整体看作一段),并且你需要保证每一个连续段的和都是相等的。
对于划分出来的一个长度为 $m$ 的连续段,它的贡献为 B[m]。被划分出的所有连续段的贡献之和就是这一种方案的总贡献。
对于所有可能的方案,请输出最大的总贡献。

Input

第一行输入一个整数 $N$。
第二行输入 $N$ 个整数,表示序列 A[1], A[2], ..., A[N],整数间用空格隔开。
第三行输入 $N$ 个整数,表示序列 B[1], B[2], ..., B[N],整数间用空格隔开。

Output

一个整数,表示最大的总贡献。

Constraints

$1 ≤ N ≤ 20,000$ 
$1 ≤ A[i], B[i] ≤ 10000$

Sample 1 Input

3
4 1 5
1 2 3

Sample 1 Output

3
一共有两种合法方案。
方案一:子段为 $\{4,1,5\}$。子段长度为 $3$,对应的贡献为 $b[3]=3$。总贡献为 $3$。
方案二:子段为 $\{4,1\},\{5\}$。第一段子段长度为 $2$,对应的贡献为 $b[2]=2$。第二段子段长度为 $1$,对应的贡献为 $b[1]=1$。总贡献为 $2+1=3$。
两个方案的最大贡献为 $3$。

Sample 2 Input

6
5 5 5 5 5 5
1 114 1 1 1 1

Sample 2 Output

342

Source/Category