abc--283--E
关键
跟炮兵阵地那道题目很像,先确定上面哪一行的状态,然后在确定下面这一行的状态,采用dp就可以枚举所有的状态
代码
#include <bits/stdc++.h> using namespace std; const int M=1005; int a[M][M],f[M][2][2]; int n,m; bool check(int p,int x,int y) { for(int i=1;i<=m;i++) if(a[p][i]!=a[p][i-1]&&a[p][i]!=a[p][i+1]&&a[p][i]!=(a[p-1][i]^x)&&a[p][i]!=(a[p+1][i]^y))return 0; return 1; } //每一行只会有两种状态,上面和下面 int main() { cin>>n>>m; memset(a,-1,sizeof(a)); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; memset(f,0x3f,sizeof(f)); f[1][0][0]=0; f[1][0][1]=1; for(int i=2;i<=n+1;i++)//现在这一样 for(int j=0;j<2;j++) for(int k=0;k<2;k++)//我的状态 for(int l=0;l<2;l++)//上下两行是什么状态 if(check(i-1,l^k,k^j))f[i][k][j]=min(f[i][k][j],f[i-1][l][k]+j); int ans=min(f[n+1][0][0],f[n+1][1][0]); if(ans>=n)ans=-1; cout<<ans<<endl; return 0; } //我这一行边,和上面两行变是没有区别的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现