您的位置:首页 > 其它

vijos1057【动态规划】

2012-10-31 22:34 190 查看
题意:求最大子正方形。

根据最大子正方形的特征,可以得到状态转移方程为

f[i][j] = min(f[i-1][j],f[i][j-1],f[i][j])+1,under the condition that the point is 1


#include <cstdio>
#include <cstring>
#define forn(i,n) for(int i=0;i<(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
inline int min(int a, int b) {
return a < b ? a : b;
}
int f[1001][1001];
int n , m , a ,ans;
void solve() {
ans = 0;
scanf("%d%d",&n,&m);
for1(i,n) for1(j,m) {
scanf("%d",&a);
if(a) {
f[i][j] = min(f[i][j-1] , min(f[i-1][j] , f[i-1][j-1])) + 1;
if(f[i][j] > ans) ans = f[i][j];
}
}
printf("%d\n",ans);
}
int main() {
solve();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: