2021/3/25
试题 历届试题 剪格子
http://lx.lanqiao.cn/problem.page?gpid=T27
//===================================
#include<iostream>
#include<algorithm>
#include<cstring>
#define ll long long
#define mm memset
using namespace std;
//======================================
#define N 11
int m,n;
int map[N][N];
bool vis[N][N];
int ans=999;
ll sum=0;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void dfs(int x,int y,int num,int he)
{
if(x<0||y<0||x>=n||y>=m) return ;
if(vis[x][y]) return ;
if(num+1>=ans) return ;
if(he*2>sum) return ;
if(he+map[x][y]==sum/2)
{
ans=min(ans,num+1);
return ;
}
vis[x][y]=true;
for(int i=0;i<4;i++)
dfs(x+dir[i][0],y+dir[i][1],num+1,he+map[x][y]);
vis[x][y]=false;
}
int main()
{
cin>>m>>n; //n行m列
mm(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>map[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
sum+=map[i][j];
dfs(0,0,0,0);
cout<<(ans==999?0:ans);
}
3906

被折叠的 条评论
为什么被折叠?



