• dp【二维动归】 jzojp1295


    一道比较典型的二维动归题目

    但我在打的时候没有推出来简洁的动归表达式0.0,有点搜索的味道,所有时间花的有点多 

    但只要优化一下就好了

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int num[3000][3000];
    int hh[3000][3000];
    int ll[3000][3000];
    int f[3000][3000];
    int ff[3000][3000];
    int main()
    {
        //freopen("a.in","r",stdin);
        int m,n;
        cin>>m>>n;
        for(int i=1;i<=m;i++)
            for(int u=1;u<=n;u++)
            {
                cin>>num[i][u];
                hh[i][u]=hh[i][u-1]+num[i][u];
                ll[i][u]=ll[i-1][u]+num[i][u];
                ff[i][u]=f[i][u]=num[i][u];
            }
            int maxx=0;
        for(int i=1;i<=m;i++)
            for(int u=1;u<=n;u++)
            {
                if(num[i][u]==0){f[i][u]==0;continue;}
                int w=f[i-1][u-1];
                int ans=0;
                for(int k=w;k>=0;k--)
                {
                    if(hh[i][u]-hh[i][u-1-k]==1)
                        if(ll[i][u]-ll[i-k-1][u]==1)
                        {
                            ans=k;
                            break;
                        }
                }
                f[i][u]+=ans;
                maxx=max(f[i][u],maxx);
            }
        for(int i=1;i<=m;i++)
            for(int u=1;u<=n;u++)
            {
                int ans=0;
                if(num[i][u]==0){ff[i][u]=0;continue;}
                int w=ff[i-1][u+1];
                for(int k=w;w>=1;k--)
                {
                    if(hh[i][u+k]-hh[i][u]==0)
                        if(ll[i][u]-ll[i-k-1][u]==1)
                        {ans=k;break;}
                }
                ff[i][u]+=ans;
                maxx=max(ff[i][u],maxx);
            }
            cout<<maxx<<endl;
        return 0;
    }
  • 相关阅读:
    集合
    元组 与 字典
    列表
    练习题
    字符串的类型补充
    3月19号练习题及作业
    变量,用户交互的补充内容,以及数据内容
    Python 入门
    计算机基础
    决策树的概念及其训练
  • 原文地址:https://www.cnblogs.com/Lazers/p/6539495.html
Copyright © 2020-2023  润新知