题目的地址
http://acm.hdu.edu.cn/showproblem.php?pid=1467
在给出的三角型中,找出最大的白色三角形。三角形最大个数可用层数表示。
分别对向上,和向下的三角形进行遍历。如果向下的三角形a[i][j]为白,判断a[i-1][j]是否为白,再把两边三角形较小的个数+1,即可。
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int n,a[500][500],i,j,t,max,per;
char str[500][500];
t=1;
while(scanf("%d",&n)!=-1,n)
{
memset(a,0,sizeof(a));
memset(str,0,sizeof(str));
getchar();
for(i=0;i<n;i++)
{
gets(str[i]);
for(j=0;j<2*n-i-1;j++)
{
if(str[i][j]==' '||str[i][j]=='#')
a[i][j]=0;
else
a[i][j]=1;
}
}
for(i=1;i<n;i++)
for(j=i;j<2*n-i-1;j+=2)
{
if(a[i][j])
{
if(a[i-1][j])
{
per=a[i-1][j-1]<a[i-1][j+1]?a[i-1][j-1]:a[i-1][j+1];
a[i][j]+=per;
}
}
}
for(i=n-3;i>=0;i--)
for(j=i+1;j<2*n-i-1;j+=2)
{
if(a[i][j])
{
if(a[i+1][j])
{
per=a[i+1][j-1]<a[i+1][j+1]?a[i+1][j-1]:a[i+1][j+1];
a[i][j]+=per;
}
}
}
max=0;
for(i=0;i<n;i++)
for(j=i;j<2*n-1-i;j++)
if(a[i][j]>max)
max=a[i][j];
printf("Triangle #%d\nThe largest triangle area is %d.\n\n",t++,max*max);
}
return 0;
}