数 学 画 图 软 件 数学画图软件 数学画图软件
前 缀 和 建 图 前缀和建图 前缀和建图
#include<bits/stdc++.h> #define re register #define f(i, a, b) for(re int i = a; i <= b; i++) using namespace std; int n, m, a[101][101], b[101][101], ans = 1, l = 2; signed main(){ scanf("%d%d", &n, &m); f(i, 1, n) f(j, 1, m){ scanf("%d", &a[i][j]); b[i][j] = b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1] + a[i][j];//求前缀和 } while(l < min(n, m)){ f(i, l, n) f(j, l, m) if(b[i][j] - b[i - l][j] - b[i][j - l] + b[i - l][j - l] == pow(l, 2))//求子矩阵和 ans = max(ans, l); l++; } printf("%d\n", ans); return 0; }d p 建 图 \mathrm{dp}建图 dp建图
#include<bits/stdc++.h> #define re register #define f(i, a, b) for(re int i = a; i <= b; ++i) using namespace std; int n, m, a[101][101], f[101][101], ans; int main(){ scanf("%d%d", &n, &m); f(i, 1, n) f(j, 1, m){ scanf("%d", &a[i][j]); if(a[i][j] == 1) f[i][j] = min(f[i - 1][j - 1], min(f[i][j - 1], f[i - 1][j])) + 1; ans = max(ans, f[i][j]); } printf("%d\n", ans); return 0; }真 ⋅ 数 学 软 件 — — G e o G e b r a 真·数学软件——\mathrm{GeoGebra} 真⋅数学软件——GeoGebra