ZOJ 2067 White Rectangles
| 2168876 | 2006-12-12 13:22:37 | Accepted | 2067 | C++ | 00:00.20 | 484K | melorain |
char rer[100][100];
int rerV[100][100];
int Chuan[100][100];
int main()
{
int n,i,j,k,x,y,cnt,min;
char t;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;++i)
{
getchar();
for(j=0;j<n;++j)
scanf("%c",&rer[i][j]);
}
for(i=0;i<n;++i)
for(j=n-1;j>=0;--j)
{
if(rer[i][j]=='#')
rerV[i][j] = 0;
else
{
if(j<n-1)
rerV[i][j] = rerV[i][j+1] + 1;
else
rerV[i][j] = 1;
}
}
for(i=0;i<n;++i)
for(j=0;j<n;++j)
{
if(rerV[i][j]==0)
{
Chuan[i][j] = 0;
continue;
}
min = rerV[i][j];
cnt = min;
for(k=i+1;k<n;++k)
{
if(rerV[k][j]<min)
min = rerV[k][j];
if(min==0)
break;
cnt += min;
}
Chuan[i][j] = cnt;
}
cnt = 0;
for(i=0;i<n;++i)
for(j=0;j<n;++j)
{
cnt += Chuan[i][j];
}
printf("%d\n",cnt);
}
return 0;
}
枚举是不行的,DP才好,但是这个算法是O(n^3)的,快不起来啊……
浙公网安备 33010602011771号