贪心还是能水过。
#include<cstdio>
using namespace std;
int n,m,k,f,fa[10000],book[300],cnt[3000],mapp[300],ans,ma[300];
int minn=1e9,mi=1e9,ans1,s[100][100];
char a[100][100];
int main()
{
scanf("%d%d",&n,&k);
for (int i=0;i<n;++i)
scanf("%s",a[i]);
for (int i=0;i<n;++i)
for (int j=0;j<n;j++)
if (a[i][j]=='Y')s[i+1][j+1]=1;
for (int i=1;i<=n;++i)
for (int j=1;j<=n;++j)
if (s[i][j]==1)
cnt[i]++,book[j]++;
for (int i=1;i<=n;++i){
if (cnt[i]<minn)minn=cnt[i],ans=1;
if (minn==cnt[i])ans++;
}
for (int i=1;i<=n;++i){
if (book[i]<mi)mi=book[i],ans1=1;
if (mi==book[i])ans1++;
}
if (minn==1&&ans>0&&k==0){printf("0");return 0;}
for (int i=1;i<=n;++i)
if (cnt[i]==minn)
for (int j=1;j<=n;++j)
if (s[i][j]==1){
mapp[j]++;
if (mapp[j]>ans){
printf("0");
return 0;
}
}
for (int i=1;i<=n;i++)
if (book[i]==mi)
for (int j=1;j<=n;j++)
if (s[j][i]==1){
ma[j]++;
if (ma[j]>ans1){
printf("0");
return 0;
}
}
minn=(minn+k)<n?(minn+k):n;
mi=(mi+k)<n?(mi+k):n;
minn=mi<minn?mi:minn;
printf("%d",minn);
return 0;
}