[SCOI2009]粉刷匠

[SCOI2009]粉刷匠

https://ac.nowcoder.com/acm/problem/20273

(这dp,服了服了,...........额,没做出来,看题解会的)参考链接:https://www.luogu.com.cn/blog/GUO2002/solution-p4158
题解:涂色,对于每一行,要不全部都不会被涂色,要不全部都会被涂上色,涂错也算涂色,所以就不用考虑未涂色也算错误的因为涂色的颜色只有两种,所以就变成对于涂色的每一行,涂蓝色还是红色,然后dp,图片说明 ,表示涂色到第i行,第j个位置,涂色k次,l=0/1,涂色正确或者错误的个数
然后涂色有三种情况:
(1)换行,对于每次换行后涂色,那铁定第一个位置是涂色正确的,那么可以得到
图片说明
图片说明
下来解释这个:涂错反过来看不就是涂对吗?
所以每次得到上述关系式
(2)对于不换行时,右边元素等于左边元素
图片说明
图片说明
正确值:左边那个元素涂色正确
错误值:不变
(3)对于不换行是,右边元素不等于左边元素
(3.1)正确值:图片说明 前面第j-1位涂k-1次的正确值+1,或者是前面j-1位涂k次的错误值+1
(3.2)错误值:图片说明 想要当前位错误,可以前面涂对的全部涂错,或者是当前位置涂对,(额,好怪.......)那么此时值可以为在j-1时k-1次涂错个数
然后每一次在涂色次数循环结束时,求最大值(最后写也行)
时间复杂度:图片说明
快绕蒙了...........

#include<bits/stdc++.h>
using namespace std;
int n,m,t,dp[51][51][51*51][2],co[51][51],ans;
int main(){
    cin>>n>>m>>t;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            char c=getchar();
            while(c!='0'&&c!='1')c=getchar();
            co[i][j]=c-'0';
        }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            for(int k=1;k<=t;k++){
                if(j==1){
                    dp[i][j][k][0]=max(dp[i-1][m][k-1][0],dp[i-1][m][k-1][1]);
                    dp[i][j][k][1]=max(dp[i-1][m][k-1][1],dp[i-1][m][k-1][0])+1;                    
                }else
                    if(co[i][j]==co[i][j-1]){
                        dp[i][j][k][1]=dp[i][j-1][k][1]+1;
                        dp[i][j][k][0]=dp[i][j-1][k][0];//贪心
                    }else{
                        dp[i][j][k][1]=max(dp[i][j-1][k-1][1]+1,dp[i][j-1][k][0]+1);
                        dp[i][j][k][0]=max(dp[i][j-1][k][1],dp[i][j-1][k-1][0]);
                    }
                ans=max(max(dp[i][j][k][0],dp[i][j][k][1]),ans);

            }
    cout<<ans;
    return 0;
}
全部评论

相关推荐

2025-12-31 19:23
已编辑
门头沟学院 Java
ssob是已读不回的,字节是压根不敢投的,简历是反反复复改了N遍的,八股是永远背不完的😅😅😅扯远了,道心破碎了,把简历发出来让大伙先看看笑话。再说正事。寒假日常实习还是很难找,连个面试都难约,我不是个例,这是网上普遍反映。不报希望了,趁着2、3月前赶紧做些什么才是。扔几个碎碎念:1.这破简历还能怎么改?写到什么程度才能过实习岗筛选?广大牛友来锐评一下2.火速辅修go,是否可行目前看来是学习成本最小的。首先,很多go实习岗位已经明确要求掌握gin等技术栈,拿java简历投go的时代已经过去了。其次,很多后端的东西,MySQL、Redis这些都是通用的,不用重新学。所以这个问题就具体为:2.1&nbsp;java&amp;go混血简历怎么写第一个项目,仿大麦的微服务,不太好改。因为有用到Redisson、AOP、SpringAI这些java强相关的东西,包装成go需要替换这些方案。第二个,点评魔改。应该可以包装成go,github上也有人用go重写过。2.2&nbsp;java&amp;go通用的轮子RPC直接pass了,太烂大街了。不知道动态线程池能不能做。反正项目上新有风险,不一定来得及,非必要就不开新的项目。补充:别跟我扯RAG了,这玩意已经成新的烂大街了,详见我上一篇的吐槽。3.认真学微调prompt什么的这个半步踩进算法了已经。八股和场景题完全就是另一套,没两三个月搞不定的。约等于换方向
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务