POJ Problem 1088 滑雪
来源:互联网 发布:mac版软件下载大全 编辑:程序博客网 时间:2024/05/15 15:49
将高度从低到高排序,依次计算路径长度:
(1)对于最小的高度而言,由它结束的最长路径是1;
(2)对于任意一个高度而言,由它结束的路径最大长度是其周围(上、下、左、右)比它小的高度的最长路径值加1的最大值。如果周围没有比它小的,则其最大路径为1。
#include<iostream>#include<vector>#include<algorithm>using namespace std;struct Data{ int num, row, col; bool operator<(const Data& rhs) const{ return num < rhs.num; }};int main() { int n, m; cin >> n >> m; vector<vector<int> > mat(n); vector<Data> arr(n*m); vector<vector<int> > len(n); for(int i = 0; i < n; ++i){ mat[i].resize(m); len[i].resize(m); for(int j = 0; j < m; ++j){ cin >> mat[i][j]; arr[i*m+j].num = mat[i][j]; arr[i*m+j].row = i; arr[i*m+j].col = j; len[i][j] = 0; } } sort(arr.begin(), arr.end()); int ans = 0; for(int i = 0; i < n*m; ++i){ int a = arr[i].row; int b = arr[i].col; if(a-1 >= 0 && mat[a-1][b] < mat[a][b]) len[a][b] = max(len[a][b],len[a-1][b]+1); if(b-1 >= 0 && mat[a][b-1] < mat[a][b]) len[a][b] = max(len[a][b],len[a][b-1]+1); if(a+1 < n && mat[a+1][b] < mat[a][b]) len[a][b] = max(len[a][b],len[a+1][b]+1); if(b+1 < m && mat[a][b+1] < mat[a][b]) len[a][b] = max(len[a][b],len[a][b+1]+1); if(len[a][b] == 0) len[a][b] = 1; ans = max(ans, len[a][b]); } cout << ans << endl;}
0 0
- POJ Problem 1088 滑雪
- POJ Problem Set - 1088.滑雪
- POJ 1088 滑雪
- POJ 1088 滑雪
- POJ 1088 滑雪
- Poj 1088 滑雪
- poj 1088 滑雪
- 滑雪--POJ--1088
- poj 1088 滑雪(DP)
- POJ 1088 滑雪
- POJ 1088 滑雪
- poj 1088 滑雪
- POJ 1088 滑雪
- poj 1088 滑雪
- POJ 1088 滑雪
- poj 1088 滑雪
- poj 1088 滑雪
- POJ 1088 滑雪 DP
- Complex类
- 【NOIP2013】洛谷1970 花匠
- Android:基础控件之(二)TextView
- Calendar类得到当前日历
- 1080P 显卡安装过程
- POJ Problem 1088 滑雪
- gdb常用命令
- ENVI对一种WGS84投影不支持的情况说明
- CCF 高速公路
- maven的命令
- 自定义View之仪表盘版进度条
- android 中如何获取radiogroup 中那个radiobutton被选择
- Linux下线程同步互斥
- JavaWeb-JavaMail邮件开发