USACO 6.1.2 A Rectangular Barn
2012-08-18 13:09
232 查看
题目大意:
给出r*c的矩阵中p个障碍点的位置,求能放置矩形的最大面积。
简单题解:
令h[i][j]表示(i,j)到竖直向上的最近障碍点(或顶端)的线段的长度,left[i][j]、right[i][j]分别表示该线段向左、右延伸的长度。则max{h[i][j]*(left[i][j]+right[i][j]-1)}即为答案。
使用动态规划求h[i][j]、left[i][j]、right[i][j]。
我的代码:
给出r*c的矩阵中p个障碍点的位置,求能放置矩形的最大面积。
简单题解:
令h[i][j]表示(i,j)到竖直向上的最近障碍点(或顶端)的线段的长度,left[i][j]、right[i][j]分别表示该线段向左、右延伸的长度。则max{h[i][j]*(left[i][j]+right[i][j]-1)}即为答案。
使用动态规划求h[i][j]、left[i][j]、right[i][j]。
我的代码:
/* ID:t-x.h1 LANG:C++ TASK:rectbarn */ #include<cstdio> #define up(x,y) if((y)>(x)) (x)=(y) FILE *fi=fopen("rectbarn.in","r"),*fo=fopen("rectbarn.out","w"); const int MAXn=3000+9,INF=99999999; bool map[MAXn][MAXn]; int left[MAXn],right[MAXn],h[MAXn]; inline int min(int a,int b) { return a?(a<b?a:b):b; } int main() { int r,c,p,i,j,k,ans=0; fscanf(fi,"%d%d%d",&r,&c,&p); for(i=1;i<=p;++i) { fscanf(fi,"%d%d",&j,&k); map[j][k]=1; } for(i=1;i<=r;++i) { for(k=0,j=1;j<=c;++j) if(map[i][j]) h[j]=0,left[j]=k=0; else ++h[j],left[j]=min(left[j],++k); for(k=0,j=c;j;--j) { right[j]=map[i][j]?k=0:min(right[j],++k); up(ans,h[j]*(left[j]+right[j]-1)); } } fprintf(fo,"%d\n",ans); fclose(fi); fclose(fo); return 0; }
相关文章推荐
- [USACO 6.1.2] A Rectangular Barn
- usaco training 6.1.2 A Rectangular Barn 题解
- USACO 6.1.2 A Rectangular Barn 单调栈
- USACO6.1.2 A Rectangular Barn(rectbarn)
- USACO 6.1.2 rectbarn
- usaco 6.1 A Rectangular Barn(最大子矩阵)
- USACO A Rectangular Barn 解题报告
- 洛谷P1209 [USACO1.3]修理牛棚 Barn Repair
- 洛谷P1209 [USACO1.3]修理牛棚 Barn Repair
- Bzoj 3409: [Usaco2009 Oct]Barn Echoes 牛棚回声
- usaco Barn Repair 解题报告
- Barn Repair USACO
- 【BZOJ1696】[Usaco2007 Feb]Building A New Barn新牛舍【中位数】【绝对值不等式】【贪心】
- usaco training 5.3.4 Big Barn 题解
- USACO Barn Repair
- 【USACO】Barn Repair
- USACO: Section 1.3 -- PROB Barn Repair
- [USACO] Barn Repair
- 3409: [Usaco2009 Oct]Barn Echoes 牛棚回声
- BZOJ 1696 [Usaco2007 Feb]Building A New Barn新牛舍 数学