codeforces 22B Bargaining Table

题意:给你一个简单图 只有 0,1 问你能摆放一个矩阵最大的周长是多少。

解题思路:水DP,第一页的题目都切不动了啊,只能找水题先下手了。

解题代码:

 1 // File Name: 401d.cpp
 2 // Author: darkdream
 3 // Created Time: 2015年03月23日 星期一 21时00分39秒
 4 
 5 #include<vector>
 6 #include<list>
 7 #include<map>
 8 #include<set>
 9 #include<deque>
10 #include<stack>
11 #include<bitset>
12 #include<algorithm>
13 #include<functional>
14 #include<numeric>
15 #include<utility>
16 #include<sstream>
17 #include<iostream>
18 #include<iomanip>
19 #include<cstdio>
20 #include<cmath>
21 #include<cstdlib>
22 #include<cstring>
23 #include<ctime>
24 #define LL long long
25 
26 using namespace std;
27 LL  n, m ; 
28 int mp[100][100];
29 int solve(int x1,int y1,int x2,int y2)
30 {
31    return mp[x2][y2] - mp[x1-1][y2] - mp[x2][y1-1] + mp[x1-1][y1-1];  
32 }
33 int main(){
34   int n , m ;
35   scanf("%d %d",&n,&m);
36   for(int i = 1;i <= n;i ++)
37   {
38      int tmp = 0 ; 
39      for(int j= 1;j <= m; j ++)
40      {
41         scanf("%1d",&mp[i][j]);
42         if(mp[i][j])
43         {
44           tmp ++ ; 
45         }
46         mp[i][j] = mp[i-1][j] + tmp ;
47      }
48   }
49   int mx =0 ; 
50   for(int i= 1;i<= n;i ++)
51   {
52     for(int j= 1;j <= m;j ++)
53     {      
54        for(int ij = i;ij <= n;ij ++)
55        {
56          for(int ji = j ;ji <= m;ji ++)
57          {
58              if(solve(i,j,ij,ji) == 0 )
59              {
60                 mx =  max(mx,(ij - i +1)* 2 + (ji -j + 1 )*2)    ;
61              }
62          }
63        }
64     }
65   }
66   printf("%d
",mx);
67   return 0;
68 }
View Code
没有梦想,何谈远方
原文地址:https://www.cnblogs.com/zyue/p/4361126.html