开心铁匠铺

bong沙卡拉卡

HDU2859(DP)

题目链接

题意:给你一个字符矩阵,找一个沿着右上左下对角线对称的子矩阵,求子矩阵最大边长。

题解:枚举每一个点作为左下角的情况,然后枚举这个点所在行右边和所在列上边的相同的点对数,和右上角的dp值+1进行比较,取小值。

没有想出来,为什么做了一些题之后感觉没有一点进步。。。。。。
不过这个题的写法感觉真的很惊艳。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[1005][1005];
int dp[1005][1005],n;
int main()
{
    while(~scanf("%d",&n) && n)
    {
        memset(dp,0,sizeof dp);
        for (int i = 0; i < n; i++)
        {
            scanf("%s",s[i]);
        }

        int ans = 1;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if(j == n - 1 || i == 0)
                {
                    dp[i][j] = 1;
                    continue;
                }
                int x = i,y = j;
                while(x >= 0 && y <= n - 1 && s[x][j] == s[i][y])
                {
                    x--;
                    y++;
                }
                x = i - x;
                if(dp[i - 1][j + 1] + 1 <= x)dp[i][j] = dp[i - 1][j + 1] + 1;
                else dp[i][j] = x;
                ans = max(ans,dp[i][j]);
            }
        }
        printf("%d\n",ans);
    }
}
阅读更多
版权声明:很高兴能帮到你,QAQ,转载记得注明出处哦。o(* ̄︶ ̄*)o https://blog.csdn.net/meituanwaimai/article/details/79981118
上一篇HDU1078(记忆化搜索)
下一篇HDU4272(DFS+优化小套路)
想对作者说点什么? 我来说一句

PR0FIBUS—DP网络结构

2010年09月12日 236KB 下载

没有更多推荐了,返回首页

关闭
关闭