how c?
  • 板块灌水区
  • 楼主jasonyjm
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/6/15 21:53
  • 上次更新2024/6/23 20:24:45
查看原帖
how c?
1371852
jasonyjm楼主2024/6/15 21:53

求调~~

#include<bits/stdc++.h>
#define int long long
#define fast register int 

using namespace std;

const int N=1e3+100;

int n,m,tt,cnt=0,ans=0x7f7f7f7f,lin[N]; 
char a[N][N];
bool vis[N],vis1[N];

void dfs(int xx,int z,int qwq){
	if (qwq==m){
		ans=min(ans,z);

		return ;
	}
	vis[xx]=true;
	for (fast i=1;i<=n;i++){
		if (vis[i]==false){
			for (fast j=1;j<=m;j++){
				if (vis1[j]!=true&&a[i][j]=='o'){
					qwq++;
					lin[j]=1;
					vis1[j]=true;
				}
			}
			dfs(i,z+1,qwq);
			for (fast j=1;j<=m;j++){
				if (lin[j]==1){
					qwq--;
					lin[j]=0;
					vis1[j]=false;
				}
			}
		}
	}
	vis[xx]=false;
}

signed main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	
	cin>>n>>m;
	
	for (fast i=1;i<=n;i++){
		cnt=0;
		for (fast j=1;j<=m;j++){
			cin>>a[i][j];
			if (a[i][j]=='o'){
				cnt++;
			}
		}
		if (cnt==m){
			cout<<1;
			return 0;
		}
	}
	cnt=0;
	for (fast i=1;i<=n;i++){
		cnt=0;
		memset(vis,false,sizeof(vis));
		memset(vis1,false,sizeof(vis1));
		memset(lin,0,sizeof(lin));
		for (fast j=1;j<=m;j++){
			if (a[i][j]=='o'){
				vis1[j]=true;
				cnt++;
			}
		}
		dfs(i,1,cnt);
	}
	cout<<ans;
	return 0;
}
/*
8 6
xxoxxo
xxoxxx
xoxxxx
xxxoxx
xxoooo
xxxxox
xoxxox
oxoxxo
*/
2024/6/15 21:53
加载中...