• SOJ 2800_三角形


    真的是O不是0【看了discuss才发现。。。。。一个大写的蠢

    【题意】多个黑白三角形组成的倒三角,求白三角形组成的最大倒三角的面积

    【分析】由于问的是倒三角个数,所以只需看与行数奇偶性相同的白色倒三角形,设v[i][j]为以第i行第j列的倒三角为顶点的最大白色倒三角形面积,则v[i][j]可通过v[i-1][j-1]和v[i-1][j+1]构成的白色倒三角面积表示,导出状态转移方程。

    【代码】

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    typedef long long ll;
    using namespace std;
    const int INF=0x3fffffff;
    int a[1100][2500];
    int v[1100][2500];
    int temp,Min,Max;
    int num,flag;
    int main (void)
    {
        scanf("%d",&num);
        while(num>0)
        {
            getchar();
            Max=1,flag=0;
            memset(a,-1,sizeof(a));
            memset(v,0,sizeof(v));
            for(int i=0;i<num;i++)
            {
                    for(int j=0;j<2*num-i-1;j++)
                    {
                        if(getchar()=='O')
                        {
                            v[i][j]=1;
                            a[i][j]=0;
                           if((j-i)%2==0) flag=1;
                        }
                }
                getchar();
            }
            for(int i=1;i<num;i++)
            {
                for(int j=i;j<2*num-i-1;j+=2)
                {
                    if((a[i][j]==0)&&(a[i-1][j]==0))
                    {
                        Min=min(v[i-1][j-1],v[i-1][j+1]);
                        temp=(int)(sqrt(Min)+0.5);
                        v[i][j]+=2*Min-(temp-1)*(temp-1)+1;
                        Max=max(v[i][j],Max);
                    }
                }
            }
           if(flag)
                printf("%d
    ",Max);
            else
                printf("0
    ");
            scanf("%d",&num);
        }
        return 0;
    }
    


    本来想用一维数组写的,可是弄得很乱,还是二维数组吧。


  • 相关阅读:
    stl_heap
    关于随机数 C++
    关于if语句的细节
    C++关于智能指针
    sqlyog
    win10 64位 汇编环境
    Qt 乱码
    Vux使用经验
    Flex布局新旧混合写法详解
    【原】npm 常用命令详解
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758877.html
Copyright © 2020-2023  润新知