小小明系列故事——游戏的烦恼

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 841    Accepted Submission(s): 296

Problem Description
 
 小小明最近在玩一款游戏,它由n*m大小的矩阵构成,矩阵上会随机产生一些黑色的点,这些点它们可能会连在一起也可能会分开,这些点的个数没有限制,但
是每个1*1方格中最多只可能有一个黑点产生。游戏要求玩家以最短的时间用x*y的小矩阵覆盖这个大矩阵,覆盖的要求有以下2点:
  1. x*y大小的小矩阵内必须有x*y个黑点。
  2. 多个小矩阵可以重叠,但是每个小矩阵放置的位置必须是独一无二的,即不同的小矩阵内的黑点不能完全相同。例如1*2的矩阵可以横着放,也可以竖着放,这两种方法是不同的,即使它们可能共用黑点。
  小小明是个粗心的孩子,他尝试了很多遍都无法将所有的符合要求的小矩阵找到,聪明的你,能不能告诉烦恼中的小小明这个大矩阵里有多少个满足要求的小矩阵呢?
 
Input
题目有多组测试数据(不多于100个);
每组测试数据的第一行包含2个正整数n和m,然后第二行是x和y(n,m,x,y的意思如题),接下来n行,每行m个字符,其中’ * ’表示黑点,’ . ’表示空白。
n和m为0则结束输入。

[Technical Specification]
0 < n, m <= 2000
0 < x, y <= 1000

 
Output
请计算并输出一共有多少个满足要求的小矩阵,每组输出占一行。
 
Sample Input
2 3
1 2
**.
.**
0 0
 
Sample Output
3
 
Source
 
刚开始进行了个普通的匹配,O(∩_∩)O~,就知道会TLE,╮(╯▽╰)╭,就是这么无奈呀!
贴一下自己丑陋的代码吧..
代码:
 #include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
const int maxn=;
char map[maxn][maxn];
int n,m;
bool match(int posx,int posy,int x,int y)
{
int i,j;
if(posx+x>n||posx<||posy+y>m||posy<)
return ;
for( i=posx; i<posx+x ; i++ ){
for( j=posy ; j<posy+y ; j++ ) {
if(map[i][j]!='*')return false;
}
}
return true;
} int work(int x,int y)
{
int i,j,cnt=;
for(i=;i<n;i++){
for(j=;j<m;j++){
if(match(i,j,x,y)) cnt++;
if(match(i,j,y,x)) cnt++;
}
}
return cnt;
}
int main()
{
int x,y,i;
while(scanf("%d%d",&n,&m)!=EOF,n+m!=)
{
scanf("%d%d",&x,&y);
for(i=;i<n;i++)
scanf("%s",map[i]);
printf("%d\n",work(x,y));
}
return ;
}

然后统计了一下,dp...简单的dp

代码: 不过依旧还是很挫,写到了680ms....

 #include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
const int maxn=;
char map[maxn][maxn];
int dp[maxn][maxn];
int n,m;
void init()
{
int i,j,cnt=;
memset(dp,,sizeof(dp));
for(i=;i<=n;i++) {
for(j=;j<=m;j++) {
if(map[i][j-]=='*')cnt++;
dp[i][j]=cnt+dp[i-][j];
}
cnt=;
}
}
int work(int x,int y){
int i,j,cnt=;
for(i=;i+x<=n;i++){
for(j=;j+y<=m;j++){
int tem=dp[i+x][j+y]-dp[i-][j+y]-dp[i+x][j-]+dp[i-][j-];
if(tem==((x+)*(y+)))cnt++;
}
}
return cnt;
}
int main()
{
int x,y,i;
while(scanf("%d%d",&n,&m),n+m!=)
{
scanf("%d%d",&x,&y);
x--,y--;
for(i=;i<=n;i++)
scanf("%s",map[i]);
init();
if(x==y) printf("%d\n",work(x,y));
else printf("%d\n",work(x,y)+work(y,x)); }
return ;
}

hdu ---(4517)小小明系列故事——游戏的烦恼(Dp)的更多相关文章

  1. 小小明系列故事——游戏的烦恼(hdu 4517)

    小小明系列故事--游戏的烦恼 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  2. HDOJ(HDU).4508 湫湫系列故事――减肥记I (DP 完全背包)

    HDOJ(HDU).4508 湫湫系列故事――减肥记I (DP 完全背包) 题意分析 裸完全背包 代码总览 #include <iostream> #include <cstdio& ...

  3. hdu 4506 小明系列故事——师兄帮帮忙【幂取模乱搞】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4506 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  4. hdu 4542 小明系列故事——未知剩余系

    小明系列故事——未知剩余系 题意:操作0表示某数有n个约数,操作1为某数有n个非约数:n <= 47777,若是存在小于2^62的数符合,则输出该数,否则若是不存在输出Illegal,若是大于2 ...

  5. HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)

    小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  6. HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)

    小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  7. hdu 4542 小明系列故事——未知剩余系 反素数 + 打表

    小明系列故事——未知剩余系 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Prob ...

  8. HDU 4828 小明系列故事——捉迷藏

    漂亮妹子点击就送:http://acm.hdu.edu.cn/showproblem.php?pid=4528 Time Limit: 500/200 MS (Java/Others)    Memo ...

  9. HDU - 4511 小明系列故事――女友的考验(AC自己主动机+DP)

    Description 最终放寒假了,小明要和女朋友一起去看电影.这天,女朋友想给小明一个考验,在小明正准备出发的时候.女朋友告诉他.她在电影院等他,小明过来的路线必须满足给定的规则:  1.如果小明 ...

随机推荐

  1. iOS深入学习(UITableView:系列1-最基本的东西)

    这是UITableView博客系列的第一篇,使用xib和arc编码,主要讲解一些UITableView使用过程中简单的.但是又容易被忽略的东西,而且我会告诉读者,怎样在使用了之后就再也不会忘记. 操作 ...

  2. 《微信开发日志》之OAuth2验证接口

    OAuth2接口说明: 企业应用中的URL链接(包括自定义菜单或者消息中的链接),可以通过OAuth2.0验证接口来获取员工的身份信息. 通过此接口获取用户身份会有一定的时间开销.对于频繁获取用户身份 ...

  3. 增长xx%带来什么信息?

    增长xx%带来什么信息? 标签(空格分隔): 概率论 在与概率论有关的题目中,我们经常会遇到:某公司增长xx%,带来哪些信息? 看下面这道题目: 某公司在华东和华南两大区域开展业务,年底汇总业绩的时候 ...

  4. 04_IOC容器装配Bean(xml方式)

    IOC容器装配Bean(xml方式) 1.Spring 提供配置Bean三种实例化方式 1)使用类构造器实例化(默认无参数) <bean id="bean1" class=& ...

  5. Data Science 和 Finance 两个领域的融合是什么样子的?

    Data Science 和 Finance 两个领域的融合是什么样子的? 2015-05-24 董可人 现在大部分人所说的Quant一般是指各大投行里做衍生品定价,信用评估,风险控制之类工作的人,这 ...

  6. ORACLE 查询日志

    SQL>select * from v$sql (#查看最近所作的操作) SQL>select * fromv $sqlarea(#查看最近所作的操作)

  7. Spring 框架的设计理念与设计模式分析

    转载地址:https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring 作为现在最优秀的框架之一,已被广泛的使用,并 ...

  8. mysql 检查字符串是否包含子串

    1.使用substring_index(src,target,index) 从src的开头查找第index个target.返回的substring为从src的开头到第num个target这段字符串.比 ...

  9. Oracle冷备份及其恢复

    一. 冷备份的概念 冷备份是指在数据库关闭状态下所做的物理拷贝,也称脱机备份. 适合于非归档模式下的备份,而且也只能采用这种方式备份. 二. 需要备份的文件 必须备份的文件: 数据文件和控制文件 可以 ...

  10. (三)NAND flash和NOR flash的区别详解

    我们使用的智能手机除了有一个可用的空间(如苹果8G.16G等),还有一个RAM容量,很多人都不是很清楚,为什么需要二个这样的芯片做存储呢,这就是我们下面要讲到的.这二种存储设备我们都统称为“FLASH ...