2 条题解
-
0
#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
#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
- 上传者