2.变换(贪心枚举)

6 篇文章 0 订阅

题目描述

现在有S 和T 两个长度相同的序列,都是仅由0 和1 构成。

我们想要把S 序列变成T 序列,每次变换我们可以把一个0 变成1,或者把一个1 变成0,第i 个数改变一次所需要的代价是Ci ×D,Ci是题目中已经给出的,跟位置i有关,即我们变换第i 个数的时候使用,D 是当前S 和T 里面不匹配的数字的数量。

显然,不同的变换顺序的代价是不一样的。我们希望求出这个最小的变换代价。
输入

第一行输入一个整数n,表示序列的长度。

第二行有一个长度为n 的序列,表示S 序列,中间有一个空格隔开。

第三行有一个长度为n 的序列,表示T 序列,中间有一个空格隔开。

第四行有n 个整数,表示Ci,整数用一个空格隔开。
输出

输出最小的变换代价。
样例输入

3
1 0 1
1 0 1
1 2 3

样例输出

0

提示

样例输入1  

 
    

样例输出1
    

样例输入2
    

样例输出2

3

1 0 1

1 0 1

1 2 3

 
    

0

 
    

3

1 0 1

0 1 0

1 2 3

 
    

10

样例输入3
    

样例输出3

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

样例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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值