POJ1088滑雪
来源:互联网 发布:啊d网络工具包教程 编辑:程序博客网 时间:2024/09/21 09:01
马上省赛了,还是刷水题的弱菜。。。
六级 + 省赛 + windows sdk + 数据结构(细+深度) + 操作系统(实现内存管理和文件操作等) 。。。
算了算,累死也很难完成了。
--------------------------------------------------------------------------------------------------------------------
滑雪这个题很早之前就做了。现在感觉现在的状态真的很适合学习了,所以重新开始学习,数据结构 + 动态规划+ 搜索。
总结可以解决问题的几个方法:
1、递归(很显然会超时)
3、记忆化搜索(有点动态规划的味道,最主要的就是记忆化,就是用一个数组标记是否被访问过)
if(dp[x][y] >= 0)
{
return dp[x][y];
}
状态转移方程:
dp[i][j] = max(dp[i-1][j],dp[i+1][j],dp[i][j-1],dp[i][j+1])+1
所以代码也是很容易实现了
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;#define MAX 105int r, h;int maps[MAX][MAX];int dp[MAX][MAX];const int moves[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};int DFS(int x, int y){int sum = 0;if(dp[x][y] >= 0){return dp[x][y];}else{for(int i = 0; i < 4; i++){int p = x + moves[i][0];int q = y + moves[i][1];if(p >= 1 && p <= r && q >= 1 && q <= h && maps[p][q] < maps[x][y]){ sum = max(sum,DFS(p,q));}}return dp[x][y] = sum + 1;}}int main(){freopen("in.txt","r",stdin);cin >> r >> h;for(int i = 1; i <= r; i++){for(int j = 1; j <= h; j++){cin >> maps[i][j];}}memset(dp, -1, sizeof(dp));int result = -1;for(int i = 1; i <= r; i++){for(int j = 1; j <= h; j++){result = max(result,DFS(i,j));}}cout << result << endl;return 0;}
- POJ1088 滑雪
- POJ1088 滑雪
- poj1088滑雪
- POJ1088 滑雪
- POJ1088 滑雪
- poj1088滑雪
- POJ1088 滑雪
- POJ1088滑雪
- POJ1088滑雪
- POJ1088滑雪
- poj1088 滑雪
- POJ1088--滑雪
- POJ1088-滑雪
- POJ1088 滑雪
- POJ1088 滑雪
- poj1088滑雪
- poj1088滑雪
- POJ1088滑雪
- java操作注册表
- Ubuntu终端中字体颜色含义
- 第二周—2.动态链表初试
- 第二周项目一
- 创建企业?这三件事情你不能搞砸!
- POJ1088滑雪
- 宏定义
- HttpContext.Current.Session是什么??
- 我的java环境变量配置
- 第三周项目三修改
- javascripte 学习笔记之一
- 第二次C程序设计上机报告
- 毕业五年后 你会在哪里?
- Linux网桥端口的arp问题