题目大意:给你几个数,这些数里面只有0或1,你有两种操作:1.把一段区域内的所有数前后交换位置。2.把一段区域内所有数取反。(区域可大可小,可以是所有数也                       可以只有一个数)。两个操作各有它的代价,你操作一次就要消耗一次代价,求把所有数都变成1所需要的最小代价。

输入:第一行输入n , ab, c :表示有n个数,操作1代价b,操作2代价c;

      第二行输入n个数,就是你要操作的数组。

输出:一行,输出最小代价。

题目分析:
1.如何运用操作1 :
 
我们可以通过操作1把所有的0聚到同一个区域内,再用操作2“一杆收”。
 
2.如何进行比较:
 
①需要几次操作:原来一共有n组0。(就是几个0处于同一个区域算作一个“组”),我们可以发现:每个1操作最多会使两个“0组”合并。(一次操作 1一定可以把两个不连通的“0组”变成一个大的“0组”,可以自己摸拟试试,确实是这样)每个2操作最多能消灭一个“0组”。所以我们一共需要n次操作,因为每种操作都相当于把“0组”的个数减少了1。
 
②操作1最多用几次:我们需要n-1次操作1把所有0聚在一起。然后我们需要1次操作2来把一组0给转化。此时操作1使用次数最多,代价 b*(n-1)+c。
 
③操作2最多用几次:把所有的“0组”全部转化即可,代价c*n。
   
 
  我们会发现,两者都是用了n次操作,所以c和b哪个小哪个多用就可以保证最终代价变小,所以最后结果就是min(b*(n-1)+c , c*n)。换言之:c和b有大小之分,而且一共使用的次数是一定的,那么肯定让代价少的操作尽可能多使用。
 
上代码!

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=3e5+10;//数据范围
int a[maxn];char s[maxn];
int n,b,c;
long long cnt;
int main(){
scanf("%d %d %d",&n,&b,&c);
scanf("%s",s);//输入是连着的数字,用一个字符串存
int i=0;
while(s[i]!='\0'){
a[i+1]=s[i]-'0';
i++;
}//把字符串转为整形数组
for(int i=1;i<=n;i++){
if(a[i]==0){
while(a[i]==0){
i++;
}//跳出循环时候,一个“0组”被遍历完毕。
cnt++;
}
}
//cnt表示有几个“0组”
if(cnt==0){
printf("0\n");
return 0;
}//如果这里不特判,(cnt-1)*b+c可能为负,结果就错了
printf("%lld\n",1ll*min(cnt*c,(cnt-1)*b+c));//cnt,b,c<3e6,cnt*c可能超过int范围

return 0;
}

最新文章

  1. SNMP Tutorial
  2. oracle 数据库Cmd命令导入导出
  3. WPF中Dispatcher未捕获异常之处理
  4. ffmpeg-20160512-git-bin
  5. 【COGS】714. USACO 1.3.2混合牛奶(贪心+水题)
  6. LCIS(m*n) 最长公共上升子序列
  7. Ngnix 安装、信号量、虚拟主机配置
  8. (?:pattern) (?=pattern) (?!pattern)
  9. Sublime Text 3 个人配置文件
  10. Flask 学习笔记
  11. STM32串口控制步进电机(原创)
  12. swift3.0 移除当前页面的前一个页面
  13. win32 dll工程开发创建对话框
  14. ios学习- 10大iOS开发者最喜爱的类库
  15. TensorFlow-谷歌深度学习库 手把手教你如何使用谷歌深度学习云平台
  16. [LeetCode] Detect Capital 检测大写格式
  17. centos7中/tmp文件保存天数
  18. join,left join,inner join,full join的区别?
  19. P1025 数的划分 dfs dp
  20. django常用命令

热门文章

  1. python django 简单接口测试页面
  2. 软件测试----xml文件介绍
  3. myBatis源码解析-二级缓存的实现方式
  4. yum管理——搭建iso镜像私有yum源仓库(1)
  5. redis-port支持前缀迁移
  6. Java锁?分布式锁?乐观锁?行锁?
  7. Volatile禁止指令重排序(三)
  8. Oracle学习(二)SQL高级--表数据相关
  9. jfinal3连接sqlserver2012 使用generator生成model 将smallint默认为string
  10. @RequiresPermissions注解的作用,超级简单的权限验证