1 条题解

  • 1
    @ 2023-1-19 19:40:51

    这是一道DP的例题,找对公式即可,代码如下:

    #include<cstdio>
    #include<iostream>
    using namespace std;
    char s[255][255];
    int f[255][255],a[255]={0};
    int main()
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i=i+1)
        {
            for(int j=1;j<=n;j=j+1)cin>>s[i][j];
        }
        for(int i=n;i>0;i=i-1)
        {
            for(int j=n;j>0;j=j-1)
            {
                if((s[i][j]-'0')>0)
                {
                    f[i][j]=((f[i+1][j]<f[i][j+1])?f[i+1][j]:f[i][j+1]);
                    f[i][j]=((f[i][j]<f[i+1][j+1])?f[i][j]:f[i+1][j+1]);
                    f[i][j]=f[i][j]+1;
                }
                for(int k=2;k<=f[i][j];k=k+1)a[k]=a[k]+1;
            }
        }
        for(int i=2;i<=n;i=i+1)
        {
            if(a[i]!=0)printf("%d %d\n",i,a[i]);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    599
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    5
    已通过
    5
    上传者