【动态规划】[luoguP1681]最大正方形II
来源:互联网 发布:windows 输出到文件 编辑:程序博客网 时间:2024/06/05 05:33
题目
发了题解。。
我们用map[][]存图
然后对于f[i][j]我们用来表示
到矩阵的第i行第j列可以构造最大为多少的正方形
所以初始化很容易得出 每一个格自身一开始都可以构成一个正方形
因此在读入的时候把每一个f[i][j]设为1
然后我们要取正方形 所以状态转移方程为
并且要满足map[i - 1][j] != map[i][j] && map[i][j - 1] != map[i][j] && map[i -1][j - 1] == map[i][j]也就是题目要求
然后每次更新ans 取f[][]中的最大值就可以了
代码如下
#include<iostream>#include<cstdio>#include<cctype> using namespace std; #define in = read(); typedef long long ll; typedef unsigned int ui; const ll size = 1500 + 10; int n , m; int map[size][size]; int ans = 1; int f[size][size];inline ll read(){ ll num = 0 , f = 1; char ch = getchar(); while(!isdigit(ch)){ if(ch == '-') f = -1; ch = getchar(); } while(isdigit(ch)){ num = num*10 + ch - '0'; ch = getchar(); } return num*f;}int main(){ n in; m in; for(register int i=1;i<=n;i++) for(register int j=1;j<=m;j++){ map[i][j] in; f[i][j] = 1; } for(register int i=1;i<=n;i++) for(register int j=1;j<=m;j++) if(map[i - 1][j] != map[i][j] && map[i][j - 1] != map[i][j] && map[i -1][j - 1] == map[i][j]){ f[i][j] = min(f[i - 1][j] , min(f[i][j -1] , f[i - 1][j - 1])) + 1; ans = max(ans , f[i][j]); }/* cout<<endl; for(register int i=1;i<=n;i++){ for(register int j=1;j<=m;j++) cout<<f[i][j]<<" "; cout<<endl; }*/ printf("%d" , ans);}//COYG
阅读全文
0 0
- 【动态规划】[luoguP1681]最大正方形II
- 【动态规划】[luoguP1387]最大正方形
- 最大子正方形 (!) 动态规划
- [leetcode] 221 Maximal Square(最大全1正方形 &动态规划)
- [leetcode] 221 Maximal Square(最大全1正方形 &动态规划)
- 洛谷 1387——最大正方形(多维动态规划)
- [DP] Luogu1681 最大正方形II
- [USACO5.3]巨大的牛棚Big Barn && 洛谷【p1387】最大正方形(动态规划)
- 动态规划详解II
- 动态规划------Backpack II
- 【动态规划】最大数列
- 最大乘积--动态规划
- 动态规划-乘积最大
- 动态规划:乘积最大
- 最大正方形
- 最大正方形
- 最大正方形
- 最大正方形
- all:用途
- 详解 Tomcat 配置文件 server.xml
- count(列名)与count(*)说明
- webview 的网页显示
- DHT应用于区块链概要
- 【动态规划】[luoguP1681]最大正方形II
- 这家公有云公司如何帮助AI商业变现?
- 抢攻万亿企业级市场,“BAT”联手浪潮、神码、用友重塑企业级生态
- Set breakpoints for debugging—>Matlab调试命令
- Asp.Net Mvc表单提交之List集合
- Nutch Crawler抓取数据并存储到MySQL
- java线程池的使用
- 极光推送PHP服务器端+ThinkPHP3.5
- 日常问题总结(10)