北大ACM1088——滑雪~~DP

这题,简单的DP加上递归。

题目的意思,从任意一个起点出发,找一条最长的路径。

下面的是AC的代码:

#include <iostream>
#include <cstring>
using namespace std;

int num[102][102];
int dp[102][102];
int r, c;
int xy[4][2] = {-1, 0, 0, -1, 1, 0, 0, 1};
int ans;

int solve(int i, int j)
{
	int max = -1;
	if(dp[i][j] != 0)
		return dp[i][j];
	for(int k = 0; k < 4; k++)
	{
		int temp_i = i + xy[k][0];
		int temp_j = j + xy[k][1];
		if(temp_i >= 0 && temp_i < r && temp_j >= 0 && temp_j < c && num[temp_i][temp_j] < num[i][j])
		{
			int res = solve(temp_i, temp_j);     //递归,求解最长的
			if(res > max)
				max = res;
		}
	}
	dp[i][j] = max + 1;
	return dp[i][j];
}

int main()
{
	int i, j;
	while(scanf("%d%d", &r, &c) != EOF)
	{
		memset(dp, 0, sizeof(dp));
		ans = 0;
		for(i = 0; i < r; i++)
			for(j = 0; j < c; j++)
				scanf("%d", &num[i][j]);
		for(i = 0; i < r; i++)
			for(j = 0; j < c; j++)
			{
				int res = solve(i, j);
				ans = res > ans ? res : ans;
			}
		printf("%d\n", ans + 1);
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 12:17:28

北大ACM1088——滑雪~~DP的相关文章

POJ 1088 滑雪(DP)

滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 77134   Accepted: 28672 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17

poj 1088 滑雪 DP(dfs的记忆化搜索)

题目地址:http://poj.org/problem?id=1088 题目大意:给你一个m*n的矩阵 如果其中一个点高于另一个点 那么就可以从高点向下滑 直到没有可以下滑的时候 就得到一条下滑路径 求最大的下滑路径 分析:因为只能从高峰滑到低峰,无后效性,所以每个点都可以找到自己的最长下滑距离(只与自己高度有关).记忆每个点的最长下滑距离,当有另一个点的下滑路径遇到这个点的时候,直接加上这个点的最长下滑距离. dp递推式是,dp[x][y] = max(dp[x][y],dp[x+1][y]+

各种背包的dp刷题板

[p1332][NYOJ skiing] 滑雪  (dp+搜索) [p1312] [vjios1448 路灯改建计划] 关灯问题 (背包预处理的分组背包) f[i][j]表示给把前i个灯分为j组可以获得的最大照明度 g[i][j]表示第i盏灯到第j盏灯分为一组在满足前提条件下的最大照明度 在预处理g[i][j]的i循环内,用一个d[x][y]数组先预处理出:[i,x]内所有编号的灯总耗电量y时的最大照明度(y的上限显然为(n-i+1)*t)然后g[i][j]=d[j][(j-i+1)*t]即可得

POJ_1088 滑雪(记忆型DP+DFS)

Description Michael喜欢滑雪,这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小.在上面的例子

滑雪(简单dp)

Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 81099   Accepted: 30239 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17 18

poj 1088 滑雪(区间dp+记忆化搜索)

题目链接:http://poj.org/problem?id=1088 思路分析: 1>状态定义:状态dp[i][j]表示在位置map[i][j]可以滑雪的最长区域长度: 2>状态转移方程:由于由位置[i, j]只能向四个方向移动,所以子问题最多有四个:所以dp[i][j]为其邻域可以滑雪的最大区域长度加上从该位置滑到邻域的长度,即1: 代码如下: #include <cstdio> #include <iostream> #include <algorithm&

Usaco 滑雪比赛 Bobsledding, 2009 Dec(dp)

Description 滑雪比赛bobsled 贝西参加了一场高山急速滑雪比赛,滑道总长度为 L.出发时,她的初速度为 1,贝西可以加速 或减速,每过 1 米,她能将速度增加 1.减少 1 或保持不变.在滑雪的过程中,贝西会遇到 N 个转 弯点,编号为 i 的转弯点距离起点有 Ti 米.安全起见,贝西到达 i 号转弯点时的速度不能超过 Si. 穿过终点的速度是没有限制的.请问在整个比赛过程中,贝西能够达到的最大速度是多少? Input Format 第一行:两个整数 L 和 N,2 ≤ L ≤

3.滑雪-深搜&amp;dp

//Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 // 1  2  3  4 5//16 17 18 19 6//15 24 25 20 7//14 23 22 21 8//13 12 11 10 9//一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小.在上面的例

POJ 1088: 滑雪(经典 DP+记忆化搜索)

滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 74996   Accepted: 27818 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17