24h購物| | PChome| 登入
2009-05-31 06:12:22| 人氣948| 回應0 | 上一篇 | 下一篇

95北市資訊學科能力競賽 最大矩形 (Area)

推薦 0 收藏 0 轉貼0 訂閱站台

作法 : DP

程式碼2 提供者 : 阿尼雅

/************************************************/

#include<stdio.h>
#include<stdlib.h>
main()
{
 int m,n;
 while(scanf("%d %d",&m,&n)==2)
   {
     getchar();
     int a,b,max=0,x,y;
     char data[201][201]={0};
     for(a=0;a<m;a++)
         for(b=0;b<n;b++)
          {data[a][b]=getchar()-48;getchar();}
     for(a=0;a<m;a++) /*a,b 座標設定*/
      for(b=0;b<n;b++)
       {
         if(data[a][b]!=0)
           {
             int c=0;
             for(x=0;x<m-a;x++) /*x,y 長寬設定*/
              for(y=0;y<n-b-c;y++)
              {
               if(data[x+a][y+b]!=1)
                 {
                  /*搜尋的寬度減少*/
                   c=n-b-y;
                   break;
                 }
                 max=(max>(x+1)*(y+1))?max:(x+1)*(y+1);
               } 
           }
       }
       printf("%d\n",max);
   }
 return 0;
}
/*
4 5
0 0 1 1 0
0 1 1 1 1
0 1 1 1 1
0 0 1 0 0
*/

/**********************************************************/

#include<iostream>  
using namespace std;  
int main()  
{  
int map[202][202];      
int ans[202][202];  
int n,m;  
while(cin>>n>>m)  
{  
   for(int i=0;i<=m+1;i++)                  
     {  
      map[0][i]=map[n+1][i]=-1;  
      ans[0][i]=ans[n+1][i]=0;  
     }  
   for(int i=0;i<=n+1;i++)  
     {  
      map[i][0]=map[i][m+1]=-1;  
      ans[i][0]=map[i][m+1]=0;  
     }  
   for(int i=1;i<=n;i++)  
      for(int i2=1;i2<=m;i2++)  
        cin>>map[i][i2];  
   for(int i=1;i<=n;i++)  
       for(int i2=1;i2<=m;i2++)  
           ans[i][i2]=ans[i-1][i2]+ans[i][i2-1]-ans[i-1][i2-1]+map[i][i2];  
      int now=0;  
   for(int i=1;i<=n;i++)  
       for(int i2=1;i2<=m;i2++)  
         {  
          if(map[i][i2]==0)continue;  
          if(i*i2<now)continue;  
            for(int i3=i-1;i3>-1;i3--)//i2  
                for(int i4=i2-1;i4>-1;i4--)//i  
                   {  
                    int k=ans[i][i2]-ans[i3][i2]-ans[i][i4]+ans[i3][i4];  
                    if((k==(i-i3)*(i2-i4))&&k>now)now=k;  
                   }  
         }  
cout<<now<<endl;  
}

台長: 來源不明
人氣(948) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: 資訊競賽 |
此分類下一篇:昇旗典禮
此分類上一篇:95高市資訊學科能力競賽 布林矩陣的等價短陣

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文