Saving the City

题目链接

https://codeforces.com/contest/1443/problem/B

解题思路

也算是dp吧。
转移(抽象讲解):
对于每个连通块(特指为1),无非是选择单独引爆,或者选择与前面的连通块相连通。
dp[i]表示引爆前i个连通块的最小花费,那对于第i个连通块而言,选择单独引爆时dp[i]=dp[i-1]+a;选择与前面的连通块连通引爆时,由于dp[i-1]表示的就是前i-1个引爆的最小花费,所以其实对于第i个连通块来说,只需要与前面的连通块相连,不需要再加上引爆的费用了,而连通的费用就是第i个连通块前面相邻的0的个数*b。

AC代码

#include<bits/stdc++.h>
#define int long long
const int N=1e5+100;
const int inf=0x3f3f3f3f;
using namespace std;
int T,a,b,n,cnt,cnt0,cnt1;
string str;
vector<int> cnttt0,cnttt1;//cnttt0[i]表示第i个0连通块的0的个数;cnttt1[i]表示第i个1连通块的1的个数。
int dp[N];
signed main()
{
    cin>>T;
    while(T--)
    {
        cin>>a>>b;
        cin>>str;
        n=str.size();
        str=' '+str;
        cnttt0.clear();
        cnttt1.clear();
        for(int i=1;i<=n;i++)
        {
            cnt1=0,cnt0=0;

            if(i==1 && str[i]=='0')
            while(i<=n && str[i]=='0') i++;//清除前导0

            while(i<=n && str[i]=='1') cnt1++,i++;    
            if(cnt1) cnttt1.push_back(cnt1);//统计1连通块

            while(i<=n && str[i]=='0') cnt0++,i++;
            if(cnt0) cnttt0.push_back(cnt0);//统计0连通块

            i--;
        }

        dp[0]=a;//初始化,如果就一个1连通块时
        for(int i=1;i<cnttt1.size();i++)
        dp[i]=min(cnttt0[i-1]*b+dp[i-1],dp[i-1]+a);

        cout<<dp[cnttt1.size()-1]<<endl;    
    }
}
思维 文章被收录于专栏

思维题都会了,ACM金牌就稳了! 我骗你的!

全部评论

相关推荐

02-08 15:53
门头沟学院 Java
CoderEcho:让公司知道便宜没好货
点赞 评论 收藏
分享
双飞二本嵌入式求拷打我是在&nbsp;BOSS&nbsp;上投递的简历,好多都没人回复,这是开场白和简历求大神帮忙看看。您好!我是2025届应届生,最快可在一周内上岗,能够实习六个月以上,并接受加班。以下是我的核心优势和相关经验:1.&nbsp;嵌入式开发能力:&nbsp;&nbsp;&nbsp;熟练掌握STM32系列单片机及其外设(如GPIO、定时器、ADC、DAC、I2C、SPI、UART等),能够独立完成硬件驱动开发和调试。&nbsp;&nbsp;熟悉FreeRTOS实时操作系统,具备多任务调度和资源管理经验。&nbsp;&nbsp;熟悉LVGL图形库开发,能够实现嵌入式设备的图形界面设计。2.&nbsp;硬件设计能力:&nbsp;&nbsp;&nbsp;具备PCB设计经验,曾为2023年工创赛物流搬运赛道设计小车主板,带领团队获得国家级银奖。&nbsp;&nbsp;&nbsp;熟悉硬件原理图分析,能够快速理解并调试硬件电路。3.&nbsp;机器人开发与竞赛经验:&nbsp;&nbsp;&nbsp;在全国大学生智能车竞赛、ROS机器人竞赛中多次获得国家级奖项,具备丰富的机器人开发经验。&nbsp;&nbsp;&nbsp;熟悉Linux环境,对ROS和ROS&nbsp;2有一定了解,能够进行机器人系统的开发与调试。4.&nbsp;编程能力:&nbsp;&nbsp;&nbsp;熟悉C/C++,熟悉Python,能够高效完成嵌入式开发和算法实现。&nbsp;&nbsp;&nbsp;具备良好的代码规范和文档编写能力。5.&nbsp;团队协作与领导能力:&nbsp;&nbsp;&nbsp;在多个项目中担任核心开发或团队负责人,具备良好的沟通能力和团队协作精神。&nbsp;&nbsp;&nbsp;在工创赛中带领团队完成项目规划、任务分配和技术攻关,展现了较强的领导力。我对嵌入式开发、机器人技术和智能硬件充满热情,期待加入贵公司,与团队共同成长,为公司创造价值!如果有合适的岗位,欢迎随时联系我,期待进一步沟通!
沉淀一会:嵌入式就是狗屎
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务