2241. [SDOI2011]打地鼠【暴力+剪枝】
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
1 2 1
2 4 2
1 2 1
Sample Output
4
【样例说明】
使用2*2的锤子,分别在左上、左下、右上、右下挥舞一次。
【数据规模和约定】
对于100%的数据,1<=M,N<=100,其他数据不小于0,不大于10^5
数据太水,枚举长宽然后check的时候加个特判就快的飞起
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a[][],b[][],n,m,sum,ans=0x7fffffff;
bool check(int x,int y)
{
if (sum%(x*y)!=) return false;
for (int i=;i<=n;++i)
for (int j=;j<=m;++j)
b[i][j]=a[i][j]; for (int i=;i<=n;++i)
for (int j=;j<=m;++j)
if (i+x-<=n && j+y-<=m)
{
int num=b[i][j];
for (int k=i;k<=i+x-;++k)
for (int l=j;l<=j+y-;++l)
{ b[k][l]-=num;
if (b[k][l]<)
return false;
}
}
for (int i=;i<=n;++i)
for (int j=;j<=m;++j)
if (b[i][j]>)
return false;
return true;
} int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;++i)
for (int j=;j<=m;++j)
scanf("%d",&a[i][j]),sum+=a[i][j];
for (int i=;i<=n;++i)
for (int j=;j<=m;++j)
if (check(i,j))
ans=min(ans,sum/i/j);
printf("%d",ans);
}
2241. [SDOI2011]打地鼠【暴力+剪枝】的更多相关文章
- BZOJ 2241: [SDOI2011]打地鼠 暴力
2241: [SDOI2011]打地鼠 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pro ...
- Bzoj 2241: [SDOI2011]打地鼠 暴力,枚举,贪心
2241: [SDOI2011]打地鼠 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1022 Solved: 651[Submit][Status ...
- [BZOJ 2241][SDOI2011]打地鼠(枚举+预处理)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2241 分析: 鉴于R,C的取值很小,于是可以人为枚举R和C的大小,然后判定这个规格的锤 ...
- bzoj 2241: [SDOI2011]打地鼠
#include<cstdio> #include<iostream> using namespace std; ][],b[][],ans,sum; void pan(int ...
- 【枚举】【SDOI 2011】【bzoj 2241】打地鼠
2241: [SDOI2011]打地鼠 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 877 Solved: 557 Description 打地鼠是 ...
- 【BZOJ2484】[SDOI2011]打地鼠(暴力)
[BZOJ2484][SDOI2011]打地鼠(暴力) 题面 BZOJ 洛谷 题解 看到数据范围这题就应该是一个暴力题了. 先考虑假如我们知道了锤子的大小\(R*C\),那么显然只需要从左上角开始从左 ...
- poj 3714 Raid【(暴力+剪枝) || (分治法+剪枝)】
题目: http://poj.org/problem?id=3714 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27048#prob ...
- 洛谷P2484 [SDOI2011]打地鼠
P2484 [SDOI2011]打地鼠 题目描述 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中.玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多 ...
- Luogu P2484 [SDOI2011]打地鼠(模拟+前缀和)
P2484 [SDOI2011]打地鼠 题意 题目描述 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中.玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地 ...
随机推荐
- linux服务器上部署jdk+tomcat+rocketmq+redis-cluster
通常我们拿到一组干净的linux服务器,需要初始化安装一些基础软件,这里一站式介绍部署jdk+tomcat+rocketmq+redis-cluster 前言:如果要在多台服务器上安装,在一台服务器上 ...
- log4j2配置文件
项目里面经常用到日志,Java开发一般用log4j.slf4j这些框架,看着配置文件有点懵.这几天看公司代码的时候,也有用到log4j,感觉要复杂一点.在本地打log,也有打到hive里面存的.看了一 ...
- jQuery UI简单的讲解
我们先进入一下问答时间,你都知道多少呢? (1)什么是jQuery UI 呢? 解答:jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互. ...
- CNN中卷积过程中padding的使用
1.podding='SAME'时,全0填充. 2.padding=“VALID”,不使用全0填充
- 第二天-while循环 格式化输出 运算符 编码
一.while循环 while 条件: 语句块(循环体) #判断条件是否成立,若成立执行循环体,然后再次判断条件...直到不满足跳出循环 else: 当条件不成立的时候执行这里,和break没 ...
- Vue组件通讯
Vue最常用的组件通讯有三种:父->子组件通讯.子->父组件通讯,兄弟组件通讯.(template用的pug模板语法) 1.父->子组件通讯 父->子组件通讯,是通过props ...
- css3+javascript实现翻页幻灯片
先上效果图 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...
- MySQL 备份恢复(导入导出)单个 innodb表
MySQL 备份恢复单个innodb表呢,对于这种恢复我们我们很多朋友都不怎么了解了,下面一起来看一篇关于MySQL 备份恢复单个innodb表的教程 在实际环境中,时不时需要备份恢复单个或多个表(注 ...
- 微信小程序 - 弹出键盘遮挡住输入框
在开发微信小程序的时候遇到,输入用户名或者手机号以及地址,手机键盘调起来,会把输入框遮挡. 如图: 以上两张图是自己工作中遇到的,此处不要着急,一个属性帮你搞定. cursor-spacing:指定光 ...
- sql server2008安装时提示重启计算机失败怎么办?
在键盘上按下组合键[Win]+[R],调出运行窗口. 在窗口中输入“regedit”,点击确定,打开注册表管理界面. 在注册表左侧目录栏中找到如下位置:“HKEY_LOCAL_MACHINE\SYST ...