SOJ 2800_三角形

来源:互联网 发布:java面向对象选择题 编辑:程序博客网 时间:2024/05/17 01:00

真的是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\n",Max);        else            printf("0\n");        scanf("%d",&num);    }    return 0;}


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


0 0
原创粉丝点击