题意:给你一个简单图 只有 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 }