这题解决的算法处理,真的很难想清楚!!尤其是最后的正矩形如何处理。不过终于看懂了

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<limits.h>
#define MAX 110
#define min(a,b) ((a)<(b))?(a):(b)
char board[MAX][MAX];
int sum[MAX][MAX]; int main(void)
{ int n,i,ans,j,len,k;
while(scanf("%d",&n)!=EOF)
{
memset(sum,,sizeof(sum)); /*初始化每个点的个数为0*/
memset(board,'#',sizeof(board)); /*棋盘的初始都为#*/
getchar(); /*接收回车 */
for(i=;i<=n;++i)
gets(board[i]+);/*将棋牌字符串放入这个board矩阵中 */ ans=; for(i=;i<=n;++i) /*取出矩阵的字符进行设置 */
for(j=;j<=n;++j)
if(board[i][j]=='.')
{
if(board[i][j-]!='.') /*如何前面不是.*/
sum[i][j]=; /*这是第i,j就是单独的点*/
else /*如何使连续.*/
sum[i][j]=sum[i][j-]+; /*自己加上墙壁上点的个数*/
} for( i=;i<=n;++i)
for( j=;j<=n;++j)
{
len=INT_MAX;
for(k=i;k<=n && sum[k][j];++k) /*从第i行一下所有的行数,第j列对应的每一行中最短的矩形个数,并且该点有值*/
{ /*当该点的顶部满足条件,且该点也满足条件则最后的矩形大小由小的部分决定(即下面的点)*/
len=min(len,sum[k][j]); /*取和小的部分就是求正矩形部分,在以i行为顶边的矩形,len=以k,j为坐标的矩形个数*/
ans+=len;
}
}
printf("%d\n",ans);
} return ;
}

最新文章

  1. 迅雷9、迅雷极速版之迅雷P2P加速:流量吸血鬼?为什么你装了迅雷之后电脑会感觉很卡很卡?
  2. java String 中 intern方法的概念
  3. php面向对象面试题
  4. Python-Day5 常用模块学习
  5. Java Map集合按照key和value排序之法
  6. [转] linux新的API signalfd、timerfd、eventfd使用说明
  7. C#文本转语音并保存wav和MP3文件
  8. win8(64位)下memcache安装时报错“ failed to install service or service already installed” 与安装
  9. (原)vs2013编译boost1.60库
  10. iOS错误之-Presenting view controllers on detached view controllers is discouraged
  11. HDU 5807 Keep In Touch
  12. Bzoj超级经验大放送题集(好评如潮哦~~~)
  13. ASP.NET MVC 下自定义模型绑定,去除字符串类型前后的空格
  14. PAT基础6-2
  15. Thrift 安装及使用
  16. 添加setuptools脚本
  17. pandas_1
  18. 新版本IntelliJ IDEA 构建maven,并用Maven创建一个web项目
  19. HDU 2476 String painter(区间DP)
  20. activity 保存数据

热门文章

  1. zabbix 的安装
  2. 供应类型与计划分类一致性检查(PO)
  3. 贴片方式COB COF COG
  4. 紫薇~还记得大明湖畔的HTML5智力拼图吗?
  5. 2016 Multi-University Training Contest 7 总结
  6. BZOJ 1143 [CTSC2008]祭祀river(二分图匹配)
  7. nodejs项目中的路由写法
  8. DZY的根(思维水)
  9. Unity 3d 刚体
  10. Spring MVC详细示例实战教程【转】