求大佬帮忙看看,我先打算用朴素写法,可以hack一组数据
#include <bits/stdc++.h>
using namespace std;
const int N=2005;
int n, k, vis[N][N];
int dx[]={1, 0}, dy[]={0, 1};
char c[N][N];
string ans;
void dfs(int x, int y, int cnt, string res)
{
if (cnt > k) return;
if (res>ans) return;
if (x==n && y==n)
{
ans=min(ans, res);
return ;
}
for (int i=0; i<2; i++)
{
int nx=x+dx[i], ny=y+dy[i];
if (nx>=1 && nx<=n && ny>=1 && ny<=n && vis[nx][ny]!=1)
{
vis[nx][ny]=1;
dfs(nx, ny, cnt, res+c[nx][ny]);
if (c[nx][ny]!='a') dfs(nx, ny, cnt+1, res+'a');
vis[nx][ny]=0;
}
}
}
int main()
{
scanf("%d%d", &n, &k);
for (int i=1; i<=n; i++)
scanf("%s", c[i]+1);
for (int i=1; i<=2*n; i++) ans+="z";
string tmp=tmp+c[1][1];
dfs(1, 1, 0, tmp);
dfs(1, 1, 1, "a");
cout<<ans;
return 0;
}