hdu 1735 字数统计

时间:2023-03-08 20:08:07
hdu 1735 字数统计

这道题是到贪心的题目,首先用ans记录下所有的0的个数,然后尽量去掉更多的0,剩下的0的个数就是最少的字数。首先想到最后一行的0的个数可以减掉,然后就是m行开头的两个0可以减掉。然后思考最多还可以减掉多少个0?当然是考虑每段的结尾处0的个数,因为还有m-1行的结尾可以减,所以就进行排序,减掉最大的m-1个段落结尾0。

#include"iostream"
#include"stdio.h"
#include"algorithm"
#include"string.h"
#include"queue"
#include"cmath"
using namespace std;
int a[][];
int n,l,m;
int cou[];//记录每段末尾零的个数
bool cmp(const int a,const int b)
{
return a>b;
}
int main()
{
while(scanf("%d%d%d",&n,&l,&m)==)
{
int i,j,k,ans;
ans=;//记录矩阵中所有0的个数
for(i=;i<n;i++)
for(j=;j<l;j++)
{
cin>>a[i][j];
if(!a[i][j]) ans++;
}
k=;ans-=*m;
for(i=l-;i>=;i--)
{
if(!a[n-][i]) ans--;
else break;
}
for(i=;i<n;i++)
{
int c=;
if(!a[i][]&&!a[i][])
{
for(j=l-;j>=;j--)
{
if(!a[i-][j]) c++;
else break;
}
cou[k++]=c;
}
}
sort(cou,cou+k,cmp);
for(i=;i<m-;i++)
{
ans-=cou[i];
}
cout<<ans<<endl;
}
return ;
}