WA*23 求助
查看原帖
WA*23 求助
549499
Disjoint_cat楼主2023/6/21 18:52

submission

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'//交互题删掉
#define FIO ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define sp_el(i,n) " \n"[i==n]//空格换行
#define put_ret(MSG) return cout<<MSG<<endl,void()
using namespace std;
void Init()
{
	
}
const int L=305,N=20,dx[4]={-1,0,0,1},dy[4]={0,-1,1,0};//18
int n,m,k;
string g[L];
int dis[N][N],dp[1<<N][N],cnt,X[N],Y[N],id[L][L],Gid;
bool vis[N][N];
#define MP make_pair
#define F first
#define S second
#define B(x) (1<<(((x)-1)))
void dfs(int sx,int sy)
{
	queue<pair<pair<int,int>,int> >q;
	memset(vis,0,sizeof(vis));
	dis[id[sx][sy]][id[sx][sy]]=0;
	vis[sx][sy]=1;
	q.push(MP(MP(sx,sy),0));
	while(q.size())
	{
		int x=q.front().F.F,y=q.front().F.S,d=q.front().S;q.pop();
		if(g[x][y]=='o'||g[x][y]=='S'||g[x][y]=='G')
		{
			if(id[x][y]<0)
			{
				X[++cnt]=x,Y[cnt]=y,id[x][y]=cnt;
				if(g[x][y]=='G')Gid=cnt;
			}
			dis[id[sx][sy]][id[x][y]]=d;
		}
		for(int i=0;i<4;i++)
		{
			int xx=x+dx[i],yy=y+dy[i];
			if(xx<1||xx>n||yy<1||yy>m||g[xx][yy]=='#')continue;
			if(!vis[xx][yy])
				vis[xx][yy]=1,q.push(MP(MP(xx,yy),d+1));
		}
	}
}
void Solve()
{
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){cin>>g[i];g[i]="$"+g[i];}
	memset(dis,0x3f,sizeof(dis));
	memset(dp,0x3f,sizeof(dp));
	memset(id,-1,sizeof(id));
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(g[i][j]=='S')X[0]=i,Y[0]=j,id[i][j]=0;
	dfs(X[0],Y[0]);
	if(!Gid)put_ret(-1);
	for(int i=1;i<=cnt;i++)dfs(X[i],Y[i]);
	dp[1][0]=0;
	for(int i=1;i<(1<<cnt+1);i++)
	{
		for(int j=0;j<=cnt;j++)
			for(int k=0;k<=cnt;k++)
				dp[i|B(k+1)][k]=min(dp[i|B(k+1)][k],dp[i][j]+dis[j][k]);
	}
	int ans=-1;
	for(int i=1;i<(1<<cnt+1);i++)
		if(dp[i][Gid]<=k)ans=max(ans,__builtin_popcount(i)-2);
	cout<<ans;
}
void QingKong()
{

}
int main()
{
#ifdef LOCAL
ll STE=clock();
#endif
	FIO;
	int T=1;
	//cin>>T;
	Init();
	while(T--)
	//while(cin>>n&&n)
	//while(cin>>n)
	{
		Solve();
		QingKong();//多测不清空,抱灵两行泪
	}
#ifdef LOCAL
ll ETE=clock();
cerr<<"\n\n-----------------------\nProgram done in "<<ETE-STE<<" ms";
#endif
	return 0;
}
2023/6/21 18:52
加载中...