2 条题解

  • 0
    @ 2026-5-17 14:26:24
    #include <bits/stdc++.h>
    using namespace std;
    
    int n,m,ans,t[15];
    char a[15][15];
    bool f,vis[15];
    
    void dfs(int pos,int r) {
    	if (pos - 1 == r) {
    		bool flag[15] = {};
    		for (int i = 1;i <= r;i++) 
    			for (int j = 1;j <= m;j++) 
    				if (a[t[i]][j] == 'o') flag[j] = 1;
    		for (int i = 1;i <= m;i++) 
    			if (flag[i] == 0) return ;
    		ans = r,f = 1;
    		return ; 
    	}
    	if (f == 1) return ;
    	for (int i = 1;i <= n;i++) {
    		if (vis[i] == 0) {
    			vis[i] = 1;
    			t[pos] = i;
    			dfs(pos + 1,r);
    			vis[i] = 0;
    		}
    	}
    }
    
    int main () {
    	cin >> n >> m;
    	for (int i = 1;i <= n;i++) 
    		for (int j = 1;j <= m;j++) cin >> a[i][j];
    	for (int i = 1;i <= n && f == 0;i++) dfs(1,i);
    	cout << ans;
    	return 0;
    }
    
    • 0
      @ 2026-1-6 22:12:40
      #include<bits/stdc++.h>
      using namespace std;
      #define int long long
      char str[20][20];
      bool v[20];
      int n,m;
      bool pd()
      {
      	for(int i=1;i<=m;i++)if(v[i]==0)return 0;
      	return 1;
      }
      signed main()
      {
      	scanf("%lld%lld",&n,&m);
      	for(int i=1;i<=n;i++)scanf("%s",str[i]+1);
      	int ans=n;
      	for(int S=1;S<(1<<n);S++)
      	{
      		int sum=0;memset(v,0,sizeof v);
      		for(int i=1;i<=n;i++)if(S&(1<<(i-1)))
      		{
      			sum++;
      			for(int j=1;j<=m;j++)
      				if(str[i][j]=='o')v[j]=1;
      		}
      		if(pd())ans=min(ans,sum);
      	}
      	printf("%lld\n",ans);
      	return 0;
      }
      
      • 1

      信息

      ID
      1621
      时间
      2000ms
      内存
      1024MiB
      难度
      7
      标签
      递交数
      16
      已通过
      11
      上传者