本文主要是介绍HDU - 2859 Phalanx,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
传送门
dp找最大对称矩形
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<vector>
#include<utility>
#include<list>
#include<deque>
#include<queue>
#include<stack>
#include<string>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cctype>
using namespace std;typedef long long LL; //数据太大了记得用LL,还有把INF也得换
typedef pair<int, int> P;const int maxn = 1e7+10; //cf数组最多差不多是这么多,1e8就会段错误
const int V_MAX = 800 + 10;
const int mod = 10007;
const int INF = 0x3f3f3f3f; //如果数据范围为long long,记得把INF的值换了
const double eps = 1e-6; //eps开太小二分容易死循环,所以直接来个100次循环就好了//多组输入时,maxn太大,用memset()会超时,血的教训;int n, m;
char maze[1100][1100];
int dp[1100][1100];//dp[i][j] = min(dp[i-1][j+1] + 1, 相匹配的边长);void solve() {for(int i = 1; i <= n; i++) {for(int j = 1; j <= n; j++) {cin >> maze[i][j];}}int ans = 1;for(int i = 1; i <= n; i++) {for(int j = 1; j <= n; j++) {if(i == 1 || j == n) dp[i][j] = 1;else {int t1 = i, t2 = j;while(t1 >= 1 && t2 <= n && maze[t1][j] == maze[i][t2]) t1--, t2++;dp[i][j] = min(dp[i-1][j+1] + 1, i - t1);ans = max(dp[i][j], ans);}}}cout << ans << endl;
}int main()
{ios::sync_with_stdio(false); //关了流同步就别用c的输入//freopen("D:\\in.txt", "r", stdin);while(cin >> n && n) {solve();}return 0;
}
这篇关于HDU - 2859 Phalanx的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!