zoukankan      html  css  js  c++  java
  • 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[10005][105];
    int n,l,m;
    int cou[10005];//记录每段末尾零的个数
    bool cmp(const int a,const int b)
    {
        return a>b;
    }
    int main()
    {
        while(scanf("%d%d%d",&n,&l,&m)==3)
        {
          int i,j,k,ans;
          ans=0;//记录矩阵中所有0的个数
          for(i=0;i<n;i++)
             for(j=0;j<l;j++)
              {
                  cin>>a[i][j];
                  if(!a[i][j]) ans++;
              }
           k=0;ans-=2*m;
           for(i=l-1;i>=0;i--)
           {
               if(!a[n-1][i]) ans--;
               else break;
           }
           for(i=1;i<n;i++)
           {
               int c=0;
               if(!a[i][0]&&!a[i][1])
               {
                   for(j=l-1;j>=0;j--)
                   {
                       if(!a[i-1][j]) c++;
                       else break;
                   }
                   cou[k++]=c;
               }
           }
           sort(cou,cou+k,cmp);
           for(i=0;i<m-1;i++)
           {
               ans-=cou[i];
           }
           cout<<ans<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    poj 1061 (扩展欧几里德算法)
    字符串 (扫一遍 + 计数)
    快排 + 二分
    勾股定理
    WD
    Acmer--弱水三千,只取一瓢
    朱光潜给青年的十二封信 之 谈升学和选课
    朱光潜给青年的十二封信 之 谈读书
    小白书--求 n!
    N阶行列式---常见的几种运算
  • 原文地址:https://www.cnblogs.com/acm-jing/p/4333404.html
Copyright © 2011-2022 走看看