zoukankan      html  css  js  c++  java
  • Bzoj 2241: [SDOI2011]打地鼠 暴力,枚举,贪心

    2241: [SDOI2011]打地鼠

    Time Limit: 10 Sec  Memory Limit: 512 MB
    Submit: 1022  Solved: 651
    [Submit][Status][Discuss]

    Description

    打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中。玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高。

    游戏中的锤子每次只能打一只地鼠,如果多只地鼠同时探出头,玩家只能通过多次挥舞锤子的方式打掉所有的地鼠。你认为这锤子太没用了,所以你改装了锤子,增加了锤子与地面的接触面积,使其每次可以击打一片区域。如果我们把地面看做M*N的方阵,其每个元素都代表一个地鼠洞,那么锤子可以覆盖R*C区域内的所有地鼠洞。但是改装后的锤子有一个缺点:每次挥舞锤子时,对于这R*C的区域中的所有地洞,锤子会打掉恰好一只地鼠。也就是说锤子覆盖的区域中,每个地洞必须至少有1只地鼠,且如果某个地洞中地鼠的个数大于1,那么这个地洞只会有1只地鼠被打掉,因此每次挥舞锤子时,恰好有R*C只地鼠被打掉。由于锤子的内部结构过于精密,因此在游戏过程中你不能旋转锤子(即不能互换R和C)。

    你可以任意更改锤子的规格(即你可以任意规定R和C的大小),但是改装锤子的工作只能在打地鼠前进行(即你不可以打掉一部分地鼠后,再改变锤子的规格)。你的任务是求出要想打掉所有的地鼠,至少需要挥舞锤子的次数。

    Hint:由于你可以把锤子的大小设置为1*1,因此本题总是有解的。

     

    Input

     第一行包含两个正整数M和N;

    下面M行每行N个正整数描述地图,每个数字表示相应位置的地洞中地鼠的数量。

     

    Output

    输出一个整数,表示最少的挥舞次数。

     

    Sample Input

    3 3

    1 2 1

    2 4 2

    1 2 1

    Sample Output


    4

    【样例说明】

    使用2*2的锤子,分别在左上、左下、右上、右下挥舞一次。

    【数据规模和约定】


    对于100%的数据,1<=M,N<=100,其他数据不小于0,不大于10^5

    HINT

     

    Source

    第一轮Day1

    题解:

    直接暴力,没有什么不可能的。。。233333。。。

    枚举锤子。。。枚举方阵。。。每次取左上角最小的。。。判断是否符合即可。。。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define INF 1e9
     4 int a[110][110],b[110][110];
     5 int read()
     6 {
     7     int s=0,fh=1;char ch=getchar();
     8     while(ch<'0'||ch>'9'){if(ch=='-')fh=-1;ch=getchar();}
     9     while(ch>='0'&&ch<='9'){s=s*10+(ch-'0');ch=getchar();}
    10     return s*fh;
    11 }
    12 int main()
    13 {
    14     int n,m,tot,i,j,r,c,pd,ii,jj,mn,tot1,ans=INF;
    15     n=read();m=read();
    16     tot=0;
    17     for(i=1;i<=n;i++)
    18     {
    19         for(j=1;j<=m;j++)
    20         {
    21             a[i][j]=read();
    22             tot+=a[i][j];
    23         }
    24     }
    25     for(r=1;r<=n;r++)
    26     {
    27         for(c=1;c<=m;c++)
    28         {
    29             if(tot%(r*c)==0)
    30             {
    31                 tot1=0;
    32                 for(i=1;i<=n;i++)
    33                 {
    34                     for(j=1;j<=m;j++)b[i][j]=a[i][j];
    35                 }
    36                 pd=0;
    37                 for(i=1;i<=n-r+1;i++)
    38                 {
    39                     for(j=1;j<=m-c+1;j++)
    40                     {
    41                         mn=b[i][j];
    42                         for(ii=i;ii<=i+r-1;ii++)
    43                         {
    44                             for(jj=j;jj<=j+c-1;jj++)
    45                             {
    46                                 if(b[ii][jj]<mn){pd=1;break;}
    47                             }
    48                             if(pd==1)break;
    49                         }
    50                         if(mn==0)continue;
    51                         if(pd==1)break;
    52                         for(ii=i;ii<=i+r-1;ii++)
    53                         {
    54                             for(jj=j;jj<=j+c-1;jj++)b[ii][jj]-=mn;
    55                         }
    56                         tot1+=mn;
    57                     }
    58                     if(pd==1)break;
    59                 }
    60                 if(pd==1)continue;
    61                 for(i=1;i<=n;i++)
    62                 {
    63                     for(j=1;j<=m;j++)
    64                     {
    65                         if(b[i][j]!=0)pd=1;
    66                     }
    67                 }
    68                 if(pd==1)continue;
    69                 ans=min(ans,tot1);
    70             }
    71         }
    72     }
    73     printf("%d",ans);
    74     fclose(stdin);
    75     fclose(stdout);
    76     return 0;
    77 }
    View Code
  • 相关阅读:
    高盛、沃尔玛 题做出来还挂了的吐槽
    amazon师兄debrief
    到所有人家距离之和最短的中点 296. Best Meeting Point
    问问题没人回答的情况怎么办终于有解了
    找名人 277. Find the Celebrity
    数组生存游戏 289. Game of Life
    547. Number of Provinces 省份数量
    428. Serialize and Deserialize Nary Tree 序列化、反序列化n叉树
    alias别名简介和使用
    面试官:线程池执行过程中遇到异常会发生什么,怎样处理? Vincent
  • 原文地址:https://www.cnblogs.com/Var123/p/5280624.html
Copyright © 2011-2022 走看看