本文地址:http://uwind.iteye.com/blog/1922844
题目大意:
小小明最近在玩一款游戏,它由n*m大小的矩阵构成,矩阵上会随机产生一些黑色的点,这些点它们可能会连在一起也可能会分开,这些点的个数没有限制,但是每个1*1方格中最多只可能有一个黑点产生。游戏要求玩家以最短的时间用x*y的小矩阵覆盖这个大矩阵,覆盖的要求有以下2点:
1. x*y大小的小矩阵内必须有x*y个黑点。
2. 多个小矩阵可以重叠,但是每个小矩阵放置的位置必须是独一无二的,即不同的小矩阵内的黑点不能完全相同。例如1*2的矩阵可以横着放,也可以竖着放,这两种方法是不同的,即使它们可能共用黑点。
小小明是个粗心的孩子,他尝试了很多遍都无法将所有的符合要求的小矩阵找到,聪明的你,能不能告诉烦恼中的小小明这个大矩阵里有多少个满足要求的小矩阵呢?
题目有多组测试数据(不多于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
解题报告:
首先看这题的数据范围,显然要求用m*n的方法过这题。
根据以往的经验,可以按行DP。
统计以第i行为底的向上最多能累计多少个星星。
然后生成一个序列h
然后再查找序列h中连续一段高度比x要大的。这一段长度记为len
如果len>=y答案就加上len-y+1
总的复杂度是O(n*m)
#include<stdio.h> #include<string.h> const int MAX=2100; char map[MAX][MAX]; int h[MAX]; int calc(int n,int x,int y) { int i,cnt=0,j; int ret=0; for(i=0;i<n;i++) { if(h[i]>=x) { cnt=0; j=i; while(j<n&&h[j]>=x) { cnt++; j++; } i=j-1; if(cnt>=y)ret+=cnt-y+1; } } return ret; } int main(){ int n,i,j; int m; int x,y; while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0)break; scanf("%d%d",&x,&y); for(i=0;i<n;i++) { scanf("%s",map[i]); } memset(h,0,sizeof(h)); int ans=0; for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(map[i][j]=='*') { h[j]++; } else { h[j]=0; } } ans+=calc(m,x,y); if(x!=y)ans+=calc(m,y,x); } printf("%d\n",ans); } return 0; }
相关推荐
【标题】"杭电ACM2000-2011答案"指的是杭州电子科技大学(Hangzhou Dianzi University,简称“杭电”)在2000年至2011年间举办的一系列ACM/ICPC(国际大学生程序设计竞赛)训练题目及其对应的解题代码。ACM/ICPC是...
《杭电ACM基础教程课件》是一套全面讲解ACM(国际大学生程序设计竞赛)基础知识的教育资源,由杭州电子科技大学精心制作,共分为13讲。这些课件旨在帮助学生掌握编程竞赛所需的核心技能,为参与ACM比赛打下坚实的...
【杭电ACM -PPT】相关知识点 “杭电ACM”指的是杭州电子科技大学(Hangzhou Dianzi University)的ACM国际大学生程序设计竞赛(ACM/ICPC)团队,这是一支活跃在国际编程竞赛领域的队伍。ACM/ICPC是一项面向全球大学...
【杭电ACM训练课件】是一份内部的教育资源,主要针对ACM(国际大学生程序设计竞赛)的训练。这份课件可能包含了丰富的编程理论、算法解析、实战技巧等内容,旨在提升参赛者的编程能力和问题解决能力。在学习这份资料...
【杭电ACM AC代码】是指杭州电子科技大学(Hangzhou Dianzi University)在ACM国际大学生程序设计竞赛(ICPC,International Collegiate Programming Contest)中的解决方案集合。这些代码是参赛队伍在解决算法问题...
杭电acm答案,都能够很容易理解,有需要的可以下载看看!!!杭电acm答案,都能够很容易理解,有需要的可以下载看看杭电acm答案,都能够很容易理解,有需要的可以下载看看杭电acm答案,都能够很容易理解,有需要的可以...
【杭电ACM部分题目答案】与【初学者PPT】是针对计算机编程竞赛——杭州电子科技大学(Hangzhou Dianzi University,简称“杭电”)的ACM/ICPC(国际大学生程序设计竞赛)训练资源。这个压缩包包含了一些解答过的杭电...
【杭电ACM竞赛队上课课件】是针对ACM国际大学生程序设计竞赛精心准备的一套教育资源,由杭州电子科技大学的知名教练主导。这个课件集合对于那些希望在ACM竞赛中崭露头角,或者对算法有深厚兴趣的同学们来说,无疑是...
【北大杭电ACM题解(详细)】是针对北京大学与杭州电子科技大学主办的ACM/ICPC(国际大学生程序设计竞赛)所编写的详细解题资料。这些解题报告和指南旨在帮助参赛者理解和解决各类算法问题,提高编程及问题解决能力...
【杭电ACM部分答案】涉及的是编程竞赛领域的一个专项训练,主要针对的是杭州电子科技大学(Hangzhou Dianzi University,简称“杭电”)所举办的ACM/ICPC(国际大学生程序设计竞赛)的练习题目。这个压缩包中的内容...
《杭电ACM题集与浙大ACM题集》是专为热衷于程序设计和算法提升的朋友精心准备的资源。这两份题集涵盖了大量经典的编程竞赛题目,旨在帮助学习者提高C、C++、Java等编程语言的算法设计与实现能力。ACM(国际大学生...
【标题】"浙江杭电ACM教学资料"涵盖了多个ACM竞赛编程的重要主题,适合初学者逐步学习。这些教学资料采用PPT格式,便于理解和记忆关键概念。 【描述】"入门专用,格式PPt"表明这是一套为刚接触ACM竞赛编程的人设计...
杭电(Hangzhou Dianzi University)的在线判题系统——HDU ACM/ICPC Online Judge,是众多编程爱好者和ACMer练习编程技能的重要平台。该平台提供了大量的算法题目,其中包括许多经典的动态规划问题。通过解决这些...
【杭电ACM课件(精品)】是针对ACM(国际大学生程序设计竞赛)的一套高质量学习资源,尤其适合编程新手和希望提升算法能力的同学们。这些课件全面覆盖了ACM竞赛中常见的核心算法和问题解决策略,旨在帮助学习者系统...
【杭电ACM训练营课件】是一套专门为ACM(国际大学生程序设计竞赛)爱好者和参赛者设计的培训资源,旨在提升参赛者的算法能力和问题解决技巧。这套课件涵盖了ACM竞赛中常见的核心算法,包括但不限于贪心算法、二分...
【杭电ACM课件.zip】是一个包含了杭州电子科技大学(Hangzhou Dianzi University,简称杭电)关于ACM竞赛课程相关资料的压缩文件。ACM国际大学生程序设计竞赛(International Collegiate Programming Contest,简称...
【杭电ACM分类】是针对杭州电子科技大学(HDU)在线判题系统(OJ)中的编程竞赛题目进行的一种整理和归类方式。这些竞赛题目通常涉及算法设计、数据结构、数学应用等多个方面,旨在提升参赛者的编程思维和解决实际...
【杭电ACM的排序题源代码】是一个集合,包含了多道编程竞赛中关于排序算法的解决方案。这些源代码主要用于解决杭电(Hangzhou Dianzi University)在线判题系统ACM(Association for Computing Machinery)的比赛...
【杭电ACM讲义内容概述】 这是一份专为初学者设计的、关于杭电ACM竞赛的经典讲义,涵盖了计算机科学中的基础算法知识。讲义内容丰富,旨在帮助学习者逐步掌握解决实际问题所需的编程技巧和算法思维。通过这份讲义,...
杭电计算机学院刘春英博士ACM培训课件,适合初学者,秒杀一切ACM基础培训!!!! ACM课件(1)_初识ACM ACM课件(2)_老少皆宜数学题 ACM课件(3)_递推求解 ACM课件(4)_动态规划(1) ACM课件(5)_动态规划(2) ACM...