真的是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; }