动态规划1-滑雪(算法基础 第4周)
2016-06-09 00:48
387 查看
问题描述:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/95f83400e8fed11f7a4ca39accafb567)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/fa1483c0528b6c9c175230f447d1195c)
讲解:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/3630b63265dcaeff57144117f73d2160)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/80a7aca85d24bbbd93cfaefb011a3de4)
代码写的太乱了,,,,(今天帮老师搬家,干了一天体力活,难受,,,)
源码:
讲解:
代码写的太乱了,,,,(今天帮老师搬家,干了一天体力活,难受,,,)
源码:
#include <iostream> #include <vector> #include <algorithm> #include <cstring> using namespace std; struct POSE { int i, j; int high; POSE() { i=0;j=0;high=0; } }; bool operator < (const POSE& p1, const POSE& p2) { return p1.high<p2.high; } int main() { POSE a[101*101]; int high[101][101]; int length[101][101]; int row=0, col=0; cin >> row >> col; int t=0; for (int i=1; i<=row; i++) for (int j=1; j<=col; j++){ a[t].i = i; a[t].j = j; cin >> a[t].high; high[i][j] = a[t].high; length[i][j] = 1; t++; } sort(a, a+row*col); //"人人为我"式递推 for (int k=0; k<row*col; k++) { int i=a[k].i; int j=a[k].j; int h=a[k].high; vector<int> len; if (i>1 && high[i-1][j]<h){ len.push_back(length[i-1][j]); } if (i<row && high[i+1][j]<h){ len.push_back(length[i+1][j]); } if (j>1 && high[i][j-1]<h){ len.push_back(length[i][j-1]); } if (j<col && high[i][j+1]<h){ len.push_back(length[i][j+1]); } if (!len.empty()){ sort(len.begin(), len.end()); length[i][j]=len.at(len.size()-1)+1; } } /********************************************** //"我为人人"式递推 for (int k=0; k<row*col; k++) { int i=a[k].i; int j=a[k].j; int h=a[k].high; if (i>1 && high[i-1][j]>h){ length[i-1][j]=max(length[i-1][j], length[i][j]+1); } if (i<row && high[i+1][j]>h){ length[i+1][j]=max(length[i+1][j], length[i][j]+1); } if (j>1 && high[i][j-1]>h){ length[i][j-1]=max(length[i][j-1], length[i][j]+1); } if (j<col && high[i][j+1]>h){ length[i][j+1]=max(length[i][j+1], length[i][j]+1); } } ************************************************************/ int maxstep=1; for (int i=1; i<=row; i++){ for (int j=1; j<=col; j++){ if (length[i][j]>maxstep){ maxstep = length[i][j]; } } } cout << maxstep << endl; return 1; }
相关文章推荐
- C++动态规划之最长公子序列实例
- C++动态规划之背包问题解决方法
- C#使用动态规划解决0-1背包问题实例分析
- 动态规划
- C++ 动态规划
- 动态规划解决背包问题的核心思路
- DP(动态规划) 解游轮费用问题
- 动态规划的用法——01背包问题
- 动态规划的用法——01背包问题
- 《收集苹果》 动态规划入门
- 《DNA比对》蓝桥杯复赛试题
- 《背包问题》 动态规划
- 自顶向下动态规划解决最长公共子序列(LCS)问题
- 01背包问题
- 初学ACM - 半数集(Half Set)问题 NOJ 1010 / FOJ 1207
- 关于爬楼梯的动态规划算法
- 动态规划 --- hdu 1003 **
- DP问题各种模型的状态转移方程
- 0-1背包解题过程
- 背包问题