玄关,求助大佬,过样例了却不知道错哪了
查看原帖
玄关,求助大佬,过样例了却不知道错哪了
629377
iamajcer楼主2024/3/20 14:21

求大佬帮忙看看,我先打算用朴素写法,可以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)
	{
		//cout<<res<<endl;
		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;
}
2024/3/20 14:21
加载中...