洛谷 1169 [ZJOI2007] 棋盘制作

本文深入解析一道经典的DP算法题目,利用前缀和与预处理思想,详细介绍了如何通过构建l、r、s数组来解决最大正方形与长方形面积问题。代码注释详尽,适合算法学习者深入理解DP技巧。

这是一道dp好题

废话不多说,看看题目意思

这道题又运用了前缀与预处理的思想

我们看着代码来解释

先解释一下各个数组的意思

l[i][j]表示i,j这个点向左拓展能满足条件的最远的点的位置

r[i][j]表示i,j这个点向右拓展能满足条件的最远的点的位置

s[i][j]表示i,j这个点向上拓展能满足条件的最大长度

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <cstring>
 6 #include <cmath>
 7 using namespace std;
 8 const int N=2005;
 9 int d[N][N],s[N][N],l[N][N],r[N][N],ans1,ans2,n,m;
10 int main()
11 {
12     scanf("%d %d",&n,&m);
13     for(int i=1;i<=n;i++)
14     {
15         for(int j=1;j<=m;j++)
16         {
17             scanf("%d",&d[i][j]);
18             l[i][j]=r[i][j]=j;//每个点的左右先设置成自己
19             s[i][j]=1;//先设置成1
20         }
21     }
22     for(int i=1;i<=n;i++)
23         for(int j=2;j<=m;j++)
24         {
25             if(d[i][j]!=d[i][j-1])
26                 l[i][j]=l[i][j-1];//处理左边
27         }
28     for(int i=1;i<=n;i++)
29         for(int j=m-1;j>0;j--)
30         {
31             if(d[i][j]!=d[i][j+1])
32                 r[i][j]=r[i][j+1];//处理右边
33         }
34     for(int i=1;i<=n;i++)
35         for(int j=1;j<=m;j++)
36         {
37             if(i>1 && d[i][j]!=d[i-1][j])
38             {
39                 s[i][j]=s[i-1][j]+1;//计算上方满足条件的最大长度
40                 r[i][j]=min(r[i][j],r[i-1][j]);//计算左边能到达的最远地方
41                 l[i][j]=max(l[i][j],l[i-1][j]);//计算右边能到达的最远地方
42             }
43             int temp1=r[i][j]-l[i][j]+1;//计算横向长度
44             int temp2=min(temp1,s[i][j]);//比较横向长度于纵向长度哪一个长
45             int temp3=s[i][j];
46             ans1=max(ans1,temp2*temp2);//正方形的面积
47             ans2=max(ans2,temp1*temp3);//长方形的面积
48         }
49     printf("%d\n%d",ans1,ans2);
50 }

代码注释已经很详细了

是一道好题啊

转载于:https://www.cnblogs.com/wzrdl/p/9801834.html

极速 PDF 阅读器是一款轻量级且快捷的 PDF 阅读软件: 体积小巧快速:安装包体积仅有 5.4M,十分轻巧,占用内存极少。经过全面框架优化,启动速度快,能瞬间启动,渲染也更快速,可带来极速的阅读体验。 阅读模式多样:提供单页模式和书本模式两种个性化阅读模式,同时还具备全屏、幻灯片等功能,用户可随心切换,满足不同阅读场景和习惯。 目录提取便捷:能够自动提取文档目录并显示,方便用户通过查看目录快速定位自己需要的内容,提高阅读效率。 精准文本搜索:采用经过速度优化的文本搜索技术,可快速精准地搜索 PDF 文件中的内容,让用户能够轻松找到所需信息。 丰富注释功能:支持多种注释工具,如写字、高亮、下划线、箭头、画线、矩形、椭圆、删除线、波浪线等,方便用户在阅读过程中对重点内容进行标记和批注。 其他实用功能:通过双击页面产生十字箭头,调整其位置可使页面上下自动滚动阅读;支持多窗口 / 文档对比,便于真题内容与答案对比等;具备截图功能,可将重点内容以图片形式分享;还支持添加书签,且书签跟随 PDF 文档,发送给他人打开也依然存在。此外,软件还提供夜间模式、羊皮卷、柔和、护眼、书香、默认等 6 套背景模式,以及多皮肤模式,可满足用户不同的视觉需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值