CF997A Convert to Ones

https://www.luogu.com.cn/problem/CF997A
贪心,模拟,思维
黄色题
思路:

对于这道题,我们要做的就是在最小花费内将给定的字符串变成全是1的串

操作1:并不能减少0

操作2:为了最小的步数,根据贪心的思想,每次都要选择连续的一段(全是0),并且左右没有更多的0

鉴于我们刚刚的贪心思想,实际上比如Sample#1,01000等价于010,也就是说连续的一段可以视为一个数

也就是说我们要减少0的段数

操作1:可以减少一段,条件是存在两段以上的0(可以把他们转到一起)

操作2:减少一段0

也就是说,当0的段数大于等于2时操作1、2等价,贪心选最小

代价:

min(A,B)*段数

以及最后要加上操作2

记0的段数为x,则答案为

min(A,B)*(x-1)+B

字符串不大,暴力求x即可

具体细节见代码


 

#include <bits/stdc++.h> using namespace std; const int N = 300030; typedef long long ll; ll n, x, y, cnt; char num[N]; int main() { scanf("%d%d%d", &n, &x, &y); scanf("%s", num + 1); num[0] = '1'; for (int i = 1; i <= n; i ++ ) { if (num[i] == '0' && num[i - 1] == '1') cnt ++ ; } if (cnt == 0) printf("0"); else { ll ans = (cnt - 1) * min(x, y) + y; printf("%lld\n", ans); } return 0; }

 


__EOF__

本文作者灰の魔女伊蕾娜
本文链接https://www.cnblogs.com/2elaina/p/16571387.html
关于博主:编程小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   -イレイナ  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示