此题的关键就在你是如何选择来计算需要加进去的砖块,是从小的height开始还是从大的height开始。本题是新建一个数组用来存储从最大的(最大的height)砖头开始的砖头数。代码中“for(int k=m;k>=1;k--)”
然后通过下面中的 str[iii][j]='1'; 将其补上;进而再计算次最大的height的砖头数。以此类推,得出结论。
#include<iostream>
#include<cstring>
using namespace std;
const int M =;
int main()
{
int m,n;
char str[M][M];
int pp[M];
cin>>m>>n;
getchar();
int i,j,k,ii,c;
for(i=;i<m;i++)
gets(str[i]);
for(k=m;k>=;k--)
{
int count =;
for(j=;j<n;j++)
{
for(i=;i<m;i++)
{
if(str[i][j]=='')
{
c=;
for(ii=i;ii<m;ii++)
{
if(str[ii][j]=='')
c++;
else
{
ii--;
break;
}
}
if(c==k)
{
count++;
for(int iii=i;iii<=ii;iii++)
str[iii][j]='';
}
i=ii;
} }
}
pp[k-]=count; }
for(i=;i<m;i++)
if(pp[i]!=)
cout<<i+<<" "<<pp[i]<<endl;
return ;
}