ZOJ 2067 White Rectangles

2168876 2006-12-12 13:22:37 Accepted 2067 C++ 00:00.20 484K melorain
#include <stdio.h>
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)的,快不起来啊……
posted on 2006-12-12 13:30  AnewR  阅读(4839)  评论(0)    收藏  举报