P3392 涂国旗

https://www.luogu.com.cn/problem/P3392
涉及知识点:模拟,枚举暴力
橙色题
思路:

我们只要枚举白与蓝、蓝与红的边界(如上图a和b),再统计三个区域里总共有多少格子需要涂改颜色,用一个变量来记录最优的答案(即需要涂改的格子数最少),不断更新,最后输出就OK了

 

代码:

int n,m,ans,mi=inf;//mi初始化成一个很大的数 char c[N][N]; int main() { int i,j,k,g; cin>>n>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++) cin>>c[i][j]; for(i=1;i<=n-2;i++)//由于白色下面还有蓝色和红色,所以i(白与蓝的边界)枚举到(n-2) for(j=i+1;j<=n-1;j++)//j(蓝与红的边界)至少要比i大1,同理枚举到(n-1),这样可以减少枚举次数 { ans=0;//初始化 //壮观地枚举三个区域 for(k=1;k<=i;k++) for(g=1;g<=m;g++) if(c[k][g]!='W') ans++; for(k=i+1;k<=j;k++) for(g=1;g<=m;g++) if(c[k][g]!='B') ans++; for(k=j+1;k<=n;k++) for(g=1;g<=m;g++) if(c[k][g]!='R') ans++; //强迫症(本蒟蒻)看到这些语句表示很开心 mi=min(ans,mi);//更新答案 } cout<<mi<<endl; return 0; }

 

 


__EOF__

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