赞
踩
思想: (贪心算法 ,看到题目是中文才做的)
- #include <iostream>
- #include <algorithm>
- using namespace std;
- #define MAX 10005
- /*488K 63MS*/
- typedef struct _point
- {
- int x;
- int y;
- int w;//权重
- }point;
-
- int cmp(const void *a,const void *b);
- int main()
- {
- int r,c;
- cin>>r>>c;
-
- point p[MAX];
- int a[102][102];
- int index=0;
- for(int i=0;i<r;i++)
- for(int j=0;j<c;j++)
- {
- p[index].x=i;
- p[index].y=j;
- cin>>a[i][j];
- p[index++].w=a[i][j];
- }
-
- qsort(p,index,sizeof(p[0]),cmp);
-
- //贪心算法
- int b[102][102];
- memset(b,0,sizeof(b));
-
- int result=0;
- for(int i=0;i<index;i++)
- {
- //计算四周的值的大小
- int max=1;
- int x=p[i].x;
- int y=p[i].y;
- int w=p[i].w;
- //up
- if(x>0)
- {
- if(w>a[x-1][y]&&max<=b[x-1][y])
- max=b[x-1][y]+1;
- }
- //down
- if(x<r-1)
- {
- if(w>a[x+1][y]&&max<=b[x+1][y])
- max=b[x+1][y]+1;
- }
- //left
- if(y>0)
- {
- if(w>a[x][y-1]&&max<=b[x][y-1])
- max=b[x][y-1]+1;
- }
- //right
- if(y<r-1)
- {
- if(w>a[x][y+1]&&max<=b[x][y+1])
- max=b[x][y+1]+1;
- }
- b[x][y]=max;
- if(result<max)
- result=max;
- }
-
- cout<<result<<endl;
- system("pause");
- return 0;
- }
-
- int cmp(const void *a,const void *b)
- {
- return ((*(point *)a).w-(*(point *)b).w);
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。