题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3208
暴力大法好!暴力出奇迹!暴力踩标程!暴力能AC!
(好吧这道题正解就是暴力)(我是来刷水题放松身心的)
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #define rep(i,l,r) for(int i=l; i<=r; i++) 6 #define clr(x,y) memset(x,y,sizeof(x)) 7 using namespace std; 8 const int maxn = 710; 9 const int dir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}}; 10 int n,m,x,y,z,w,f[maxn][maxn],h[maxn][maxn]; 11 char ch[10]; 12 bool p[maxn][maxn]; 13 inline int read(){ 14 int ans = 0, f = 1; 15 char c = getchar(); 16 for(; !isdigit(c); c = getchar()) 17 if (c == ‘-‘) f = -1; 18 for(; isdigit(c); c = getchar()) 19 ans = ans * 10 + c - ‘0‘; 20 return ans * f; 21 } 22 inline bool valid(int x,int y){ 23 return x >= 1 && x <= n && y >= 1 && y <= n; 24 } 25 int dfs(int x,int y){ 26 if (p[x][y]) return 0; 27 if (f[x][y]) return f[x][y]; 28 f[x][y] = 1; 29 rep(i,0,3){ 30 int xx = x + dir[i][0]; 31 int yy = y + dir[i][1]; 32 if (valid(xx,yy) && h[xx][yy] < h[x][y]) 33 f[x][y] = max(f[x][y],dfs(xx,yy) + 1); 34 } 35 return f[x][y]; 36 } 37 int main(){ 38 n = read(); clr(p,0); 39 rep(i,1,n) rep(j,1,n) h[i][j] = read(); 40 m = read(); 41 rep(i,1,m){ 42 scanf("%s",ch); 43 if (ch[0] == ‘C‘){ 44 x = read(); y = read(); z = read(); h[x][y] = z; 45 } 46 else if (ch[0] == ‘S‘ || ch[0] == ‘B‘){ 47 x = read(); y = read(); z = read(); w = read(); 48 rep(j,x,z) rep(k,y,w) p[j][k] = (ch[0] == ‘S‘); 49 } 50 else{ 51 clr(f,0); int mx = -1; 52 rep(j,1,n) rep(k,1,n) mx = max(mx,dfs(j,k)); 53 printf("%d\n",mx); 54 } 55 } 56 return 0; 57 }
原文:http://www.cnblogs.com/jimzeng/p/bzoj3208.html