游园会有有一个项目叫做变换,这个项目的规则如下:
现在有S 和T 两个长度相同的序列,都是由0 和1 构成。
我们想要把S 序列变成T 序列,每次变换我们可以把一个0 变成1,或者把一个1 变成0,
第i 个数改变一次所需要的代价是C_i \times D,C_i 是题目给出的,跟位置i 有关,即我们变换第i 个数的时候使用,D 是当前S 和T 里面不匹配的数字的数量。
显然,不同的变换顺序的代价是不一样的。我们希望求出这个最小的变换代价。
输入的第一行是一个整数n,表示序列的长度。
接下来一行有一个长度为n 的序列,表示S 序列,中间有一个空格隔开。
接下来一行有一个长度为n 的序列,表示T 序列,中间有一个空格隔开。
接下来一行有n 个整数,表示C_i,整数用一个空格隔开。
输出最小的变换代价。
3 1 0 1 1 0 1 1 2 3
0
3 1 0 1 0 1 0 1 2 3
10
【输入输出样例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~3 :n ≤ 10 保证S 和T 最多只有一个数不同
数据4~7: n ≤ 2000 ,1 ≤ Ci ≤ 100
数据8~10: n ≤ 100000