#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int ans[15][15];
int ok[15][15];
int Min=100000;
int Count=0;
int n,m;
int sum=0;
void dfs(int x,int y,int tot){
ok[x][y]=1;Count++;
if(tot>sum);
else if(tot==sum){
Min=min(Min,Count);
}
else{
if(ok[x+1][y]==0&&x+1<=n)dfs(x+1,y,tot+ans[x+1][y]);
if(ok[x-1][y]==0&&x-1>=1)dfs(x-1,y,tot+ans[x-1][y]);
if(ok[x][y+1]==0&&y+1<=m)dfs(x,y+1,tot+ans[x][y+1]);
if(ok[x][y-1]==0&&y-1>=1)dfs(x,y-1,tot+ans[x][y-1]);
}
ok[x][y]=0;Count--;
}
int main()
{
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&ans[i][j]);
sum+=ans[i][j];
}
}
if(sum%2)printf("0");//不能均分
else{
memset(ok,0,sizeof(ok));
sum/=2;
dfs(1,1,ans[1][1]);
if(Min==100000)printf("0");
else printf("%d",Min);
}
return 0;
}
蓝桥杯 剪格子
最新推荐文章于 2024-03-30 13:52:55 发布