博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1937 Finding Seats 尺取法
阅读量:4073 次
发布时间:2019-05-25

本文共 1484 字,大约阅读时间需要 4 分钟。

这道题主要就是选一个对角矩阵,使得其内的可用座位》=k,求满足这个条件的最小矩阵面积

三重循环加优化,最内层为尺取法,复杂度大概为300;

故空间复杂度为300^3,不会超时,同时第三层内的搜索与判断都应为加法级别的;

第一次打的时候判断一个区域内的可用座位是暴力搜索,最麻烦的时候复杂度达到300^5,。。超时

看了其他人的代码才明白;

先进行一个对矩阵内可用座位的预处理,复杂度为300^2;

故代码的复杂度可理解为300^3+300^2,比我都300^3*300^2快的不是一个级别

代码:

#include
#include
#include
using namespace std;const int INF=1<<31-1;char a[310][310];int mmap[310][310];int r,c,k;void chuli(){ int i,j; for(i=1;i<=r;i++) mmap[i][1]=(a[i][1]=='.'); for(j=1;j<=c;j++) mmap[1][j]=(a[1][j]=='.'); for(i=1;i<=r;i++) { for(j=1;j<=c;j++) { mmap[i][j]=(mmap[i-1][j]+mmap[i][j-1]-mmap[i-1][j-1]+(a[i][j]=='.')); } }}int check(int x1,int y1,int x2,int y2){ if(mmap[x2][y2]+mmap[x1-1][y1-1]-mmap[x1-1][y2]-mmap[x2][y1-1]>=k) return 0; else return 1;}int main(){ while(scanf("%d%d%d",&r,&c,&k)!=EOF) { memset(mmap,0,sizeof(mmap)); if(r==c&&r==k&&k==0) { break; } int i,j; for(i=1;i<=r;i++) scanf("%s",a[i]+1); chuli(); int t1,t2; int min=INF; for(i=1;i<=r;i++) { for(j=i;j<=r;j++) { for(t1=1,t2=1;t1<=c;t1++) { while(check(i,t1,j,t2)==1&&t2
(j-i+1)*(t2-t1+1)) min=(j-i+1)*(t2-t1+1); } } } } printf("%d\n",min); } return 0;}

转载地址:http://yygji.baihongyu.com/

你可能感兴趣的文章
[转]JavaScript最全的10种跨域共享的方法
查看>>
select元素的onchange事件触发在IE,firefox,chrome的不同
查看>>
[转]最受欢迎的10个 Linux 单行命令
查看>>
[转]Web开发人员速查卡
查看>>
PHP中的is_callable函数
查看>>
Yii分析2:组件的事件机制
查看>>
[转发]I/O模型-读书笔记
查看>>
[转]关于Apache的内容协商
查看>>
[转]Managing JavaScript Objects
查看>>
[转]麻省理工免费课程)计算机科学和编程导论
查看>>
[转]打印质数的各种算法
查看>>
[转]javascript with延伸的作用域是只读的吗?
查看>>
phpDocumentor学习记录
查看>>
php的autoload与global
查看>>
IE不支持option的display:none属性
查看>>
PHP写二进制BOM头
查看>>
JQuery1.4与1.3一个很小的不同之处:关于<input type="checkbox"……
查看>>
关于JQuery UI:dialog的isOpen API使用
查看>>
[分享]mysql内置用于字符串型ip地址和整数型ip地址转换函数
查看>>
Web Worker
查看>>