【发布时间】:2010-12-16 03:30:31
【问题描述】:
我需要在一个包含 1 和 0 的巨大文件中找到最大的 1 正方形。我知道我必须使用动态编程。我将它存储在二维数组中。找到最大正方形的算法的任何帮助都会很棒,谢谢!
示例输入:
1 0 1 0 1 0
1 0 1 1 1 1
0 1 1 1 1 1
0 0 1 1 1 1
1 1 1 1 1 1
答案:
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
到目前为止我的代码:
int Square (Sq[int x][int y]) {
if (Sq[x][y]) == 0) {
return 0;
}
else {
return 1+MIN( Sq(X-1,Y), Sq(X,Y-1), Sq(X-1,Y-1) );
}
}
(假设值已经输入到数组中)
int main() {
int Sq[5][6]; //5,6 = bottom right conner
int X = Square(Sq[5][6]);
}
我该如何从那里继续?
【问题讨论】:
-
请提供迄今为止您的发现的摘要。
-
输入也总是正方形的吗?
-
@jeffamaphone:示例输入不是。从中得出你喜欢的结论;-)
-
嗯,我知道这与最长公共子字符串和 1-0 napsack 问题有关,但这就是我所得到的。没有输入可以是正方形或矩形。
-
任何想要将此问题作为练习的人都应该查看问题 E:来自东南地区 ACM ICPC 2010 问题集的最大平方:ser.cs.fit.edu/ser2010/problems 实施算法,并根据评委的输入对其进行测试/输出文件。
标签: c matrix dynamic-programming