金沙澳门官网登录-www.js8.com-金沙澳门官网下载app

bzoj1910: [Ctsc2002] Award 颁奖典礼

Input

首先行李包裹涵八个正整数n, m(1<=n,m<=200),分别表示YONG-IN 哈尔l的矩形网格区域的行数和列数。以下n行每行满含m个数字,非0即1,各种数字描述三个单位网格,1代表该单位网格存在展现台,0意味着该单位网格不设有体现台。

Output

仅蕴涵三个正整数,表示最大的I型颁奖台的面积。如若不设有法定的I型颁奖台,则输出0。

Sample Output

15

bzoj1910: [Ctsc2002] Award 颁奖典礼。Sample Input

6 8
bzoj1910: [Ctsc2002] Award 颁奖典礼。1 1 1 1 1 0 0 1
1 0 0 0 0 1 1 1
1 0 0 0 0 0 1 1
1 0 1 0 1 0 1 0
bzoj1910: [Ctsc2002] Award 颁奖典礼。1 0 0 0 0 0 0 1
1 1 0 0 0 1 0 1

HINT

图片 1

 题意依然不行好明白的,其实也就分为二种情状来改造而已。

【拆解标题】二个  I  其实正是3个矩形,显著能够用DP做,设f[1..3][i][j][k]代表到第1..3个矩形结束,第i行,j~k列为底的最大面积。

那样定义恐怕有歧义,那就举个例证说可瑞康(Karicare)(Nutrilon)下。

图片 2

bzoj1910: [Ctsc2002] Award 颁奖典礼。 

 

下一场显著的改动:

if(  k~j都是0  )

f[1][bzoj1910: [Ctsc2002] Award 颁奖典礼。i][j][k]=max(f[1][i-1][j][k],0)+k-j+1;

//为啥那边max后边有个0?因为要开端化为负的宏大值。这又是干什么?因为不早先化就不能保证2号和3号矩形的上边一定有矩形,f[2][1][7][7]将=1
f[2][i][j][k]=max(g2[i-1][j][k],f[2][i-1][j][k])+k-j+1;

//g2[i][j][k]仓库储存【j,k】闭区间的补集的最优值……←无视那句话,即饱含区间【j,k】的最优解
f[3][i][j][k]=max(g1[i-1][j][k],f[3][i-1][j][k])+k-j+1;

//g1[i][j][k]是被【j,k】包涵的最优解……小编解释不清……也就那样水和平平的主张大概我们都懂

 1 #include<cstring>
 2 #include<cmath>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cstdio>
 6 #define N 207
 7 #define inf 1000000009
 8 using namespace std;
 9 
10 int n,m,ans;
11 
12 int f[4][N][N][N],s[N][N],x1[N][N][N],x2[N][N][N];
13 
14 int main()
15 {
16     scanf("%d%d",&n,&m);
17     memset(x1,192,sizeof(x1));
18     memset(x2,192,sizeof(x2));
19     memset(f,192,sizeof(f));//先赋值为一个最大值。 
20     for (int i=1;i<=m;i++)
21         for (int j=1;j<=m;j++)
22             f[1][0][i][j]=0;//第零行初始化为0,表示没有长度。 
23     int x;
24     for (int i=1;i<=n;i++)
25         for (int j=1;j<=m;j++)
26             {
27                 scanf("%d",&x);
28                 s[i][j]=s[i][j-1]+x;//处理前缀和。 
29             }
30     for (int i=1;i<=n;i++)
31     {
32         for (int j=1;j<=m;j++)
33             for (int k=j;k<=m;k++)
34             if (s[i][k]-s[i][j-1]==0)//如果这一段都是空地的话。 
35             {
36                 f[1][i][j][k]=max(f[1][i-1][j][k],0)+k-j+1;//如果上一层是有的话,就继续转移。 
37                 f[2][i][j][k]=max(x2[i-1][j][k],f[2][i-1][j][k])+k-j+1;//也是一样的道理,从上一层的最大值来转移。 
38                 f[3][i][j][k]=max(x1[i-1][j][k],f[3][i-1][j][k])+k-j+1;
39                 ans=max(ans,f[3][i][j][k]);//ans每次从当前I型中取最大值。 
40             }
41         for (int l=0;l<=m-1;l++)
42             for (int j=1;j+l<=m;j++)
43             {
44                 int k=j+l;
45                 x1[i][j][k]=max(max(x1[i][j+1][k],x1[i][j][k-1]),f[2][i][j+1][k-1]);//x1数组是用来更新第三块矩阵的,代表了第二号矩阵。 
46             }        
47         for (int l=m-1;l>=0;l--)
48             for (int j=1;j+l<=m;j++)
49             {
50                 int k=j+l;
51                 x2[i][j][k]=max(max(x2[i][j-1][k],x2[i][j][k+1]),f[1][i][j-1][k+1]);//x2数组是用来更新第二块矩阵的,代表了第一号矩阵。 
52             }
53         //x1,x2表示衔接矩阵。    
54     }
55     printf("%dn",ans);
56 }

 

1910: [Ctsc2002] Award 颁奖仪式

Time Limit: 5 Sec  Memory Limit: 259 MB
Submit: 183  Solved: 98
[Submit][Status]

Description

IOI二零零一的颁奖典礼将要YONG-IN 哈尔l隆重举行。大家在经验了充满梦幻的FIFA World Cup之后变得更为丰富情趣。为了使颁奖仪式更具魔力,有人建议在YONG-IN Hall中搭建一个I字型的颁奖台,以此表示音讯学Informatics。思念到竞技的赞助商们只怕要在YONG-IN 哈尔l中布置了非常多展现台,他们大概不甘于移动显示台的职责。你当做IOI二〇〇〇的金牌得主自然地形成了她们求助的对象。 YONG-IN 哈尔l是多个矩形的网格区域。各种赞助商的展现台都挤占了若干个单位网格。I型颁奖台将正向搭建,且平行于YONG-IN 哈尔l的边缘。I型颁奖台是由多个矩形相接叠成的,个中上方和江湖的矩形的两边务必都超过中间的矩形,不然将被误会成T, L, J等字母。举例: 图片 3 这是三个官方的I型颁奖台,而以下二种情景均非法:图片 4 希望你编制程序寻觅面积最大的I型颁奖台,使其不掩瞒任何显示台。

本文由金沙澳门官网登录发布于世界杯实况,转载请注明出处:bzoj1910: [Ctsc2002] Award 颁奖典礼

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。