#2531. 变换----cx202002
变换----cx202002
Background
现在有两个S和T长度相同的序列,都由0和1构成。 我们想要把 S 序列变成 T 序列,每次变换我们可以把一个 0 变成 1,或者把一个 1 变成 0,第 i 个数改变一次所需要的代价是 C~i~~ ~×D,C~i~ ~~ 是题目给出的,跟位置 i 有关,即我们变换第 i 个数的时候使用,D 是当前 S 和 T 里面不匹配的数字的数量。显然,不同的变换顺序的代价是不一样的。我们希望求出这个最小的变换代价。
Input
输入的第一行是一个整数 n,表示序列的长度。 接下来一行有一个长度为 n 的序列,表示 S 序列,中间有一个空格隔开。接下来一行有一个长度为 n 的序列,表示 T 序列,中间有一个空格隔开。 接下来一行有 n 个整数,表示 Ci,整数用一个空格隔开。
Output
输出最小的变换代价。
Samples
3
1 0 1
1 0 1
1 2 3
0
3
1 0 1
0 1 0
1 2 3
10
10
0 0 1 0 1 0 0 0 0 0
0 1 1 1 1 0 0 1 1 0
72 38 91 18 10 40 90 8 22 21
168
Limitation
【样例1解释】 这里 S 和 T 是完全一样的,所以不需要变换,最小的变换代价是 0。
【样例2解释】 这里我们先变换第 1 个数,花费的代价是 C1×3 = 3,此时还有 3 个数没有匹配好,所以乘以 3,然后我们变换第 2 个数,花费的代价是 C2 ×2 = 4,此时还有 2 个数没有匹配好,所以乘以 2,然后我们变换第 3 个数,花费的代价是 C3×1 = 3,此时只有 1 个数没有匹配好,所以乘以 1,总的代价 10,为最小代价。 如果我们换种顺序去变换,比如我们先变换第 3 个,再变换第 2 个,最后变换第1 个,那么花费的代价就是 C3 ×3+ C2 ×2+ C1 ×1 = 14。
【数据范围】
对于所有的数据:1 ≤ n ≤ 100000,1 ≤ Ci ≤ 10000。