1. 程式人生 > >【面試筆試演算法】Problem 1 : DP滑雪問題--網易網際網路演算法實習生2017筆試題

【面試筆試演算法】Problem 1 : DP滑雪問題--網易網際網路演算法實習生2017筆試題

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

一個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小。在上面的例子中,一條可滑行的滑坡為24-17-16-1。當然25-24-23-...-3-2-1更長。事實上,這是最長的一條。

Input

輸入的第一行表示區域的行數R和列數C(1 <= R,C <= 100)。下面是R行,每行有C個整數,代表高度h,0<=h<=10000。

Output

輸出最長區域的長度。
Sample Input
5 5
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
Sample Output
25
// SkiProgram.cpp : 定義控制檯應用程式的入口點。
//

#include "stdafx.h"
#include <iostream>
#include <stdio.h>

using namespace std;

//全域性變數
int map[100][100] = { -1 };//輸入陣列
int path[100][100] = { -1 };//記錄每個點的最長路徑
int maxResult = -1; //記錄最大值
int rows, cols; //行列數

int dps(int i, int j)
{
	int& result = path[i][j];  //讀取該點的路徑
	if (result > 0)//遞迴結束標誌,如果已經計算過就返回該點的最長路徑
	{
		return result;
	}
	result = 1; 
	int temp = 0;
	if (i + 1 < rows && map[i][j] > map[i + 1][j])//如果右邊的值比自己小,則右移
	{
		temp = dps(i + 1, j) + 1;//遞迴
		if (temp > result)//如果路徑比result大,則賦值給result
		{
			result = temp;
		}
	}
	if (i - 1 >= 0 && map[i][j] > map[i - 1][j])//如果左邊的值比自己小,則左移
	{
		temp = dps(i - 1, j) + 1;//同上
		if (temp > result)
		{
			result = temp;
		}
	}
	if (j + 1 < cols && map[i][j] > map[i][j+1])//如果上面的值比自己小,則上移
	{
		temp = dps(i, j+1) + 1;//同上
		if (temp > result)
		{
			result = temp;
		}
	}
	if (j - 1 >= 0 && map[i][j] > map[i][j-1])//如果下邊的值比自己小,則下移
	{
		temp = dps(i, j-1) + 1;//同上
		if (temp > result)
		{
			result = temp;
		}
	}

	if (result > maxResult)//求取最大路徑長度
	{
		maxResult = result;
	}
	return result;
}
int main()
{
	while (cin >> rows >> cols)
	{
		for (int i = 0; i < rows; ++i)
		{
			for (int j = 0; j < cols;++j)
			{
				cin >> map[i][j];
			}
		}
		for (int i = 0; i < rows; ++i)
		{
			for (int j = 0; j < cols; ++j)
			{
				dps(i, j);
			}
		}
		cout << maxResult << endl;
	}
    return 0;
}

相關推薦

面試筆試演算法Problem 1 : DP滑雪問題--網際網路演算法實習生2017試題

Description Michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是 為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道

面試筆試演算法Program 2:Amusing Digits(遊戲試題)

描述 網易成立於1997年6月,是中國領先的網際網路技術公司。其相繼推出了入口網站、線上遊戲、電子郵箱、線上教育、電子商務等多種服務,目標是利用最先進的網際網路技術,加強人與人之間資訊的交流和共享,實現“網聚人的力量”。 網易線上遊戲是網易公司的一個重要組成部分,在開發實力、產品線和市場佔有率上均是國產網

面試筆試演算法Program 5 : 推箱子 (遊戲試題)

#include "stdafx.h" #include <string> #include <stdio.h> #include <iostream> using namespace std; char Board[ 100][100 ]; // 棋盤 char Bo

FastDev4Android框架開發HorizontalScrollView,Fragment,FragmentStatePagerAdapter打造新聞Tab及滑動頁面效果(三十六)

轉載請標明出處:(一).前言:            【好訊息】個人網站已經上線執行,後面部落格以及技術乾貨等精彩文章會同步更新,請大家關注收藏:http://www.lcode.org         仿36Kr客戶端開發過程中,因為他們網站上面的新聞文章分類比較多,所以我

親測有效Kali Linux無法安裝雲音樂的解決方案

問題描述 由於 Kali Linux 的核心是基於 Debian 的,我們在安裝網易雲音樂的時候更偏向於選擇安裝網易雲音樂 v1.1.0 deepin15(64位) 的包,可是我發現在安裝過程中,無法定位 libqcef1 軟體包,對於很多鍾愛網易雲音樂的粉絲們肯定是一大打擊啊,所以為了解決這一問題,我將我踩

校招面試 之 C++1題 為什麽優先使用構造函數的初始化列表

初始化 校招 操作 struct st2 使用 mage div 賦值運算 1.首先看一個例子: #include<iostream> using namespace std; class Test1 { public: Test1() // 無參

ECG理論篇1)AI實現心律失常判別:心電基礎知識及利用演算法判別心律失常的分析流程

最近開始做一個新的專案,使用深度學習來優化傳統的心律失常預測演算法 因為自己也是初涉這個方向,所以學習開始的第一步就是了解背景知識。 基礎詞彙 心電圖(Electrocardiogram,ECG):指心臟在每個心動週期中,由起搏點、心房、心室相繼興奮,伴隨著生物電的變化,通過心電

演算法設計與分析基礎第三版習題1.1 4

演算法設計與分析基礎 習題1.1 4 設計一個[√n]的演算法,n是任意正整數。除了賦值和比較運算,該演算法只能用到基本的四則運算。 程式碼實現: #include "iostream" using namespace std; double n; doubl

面試複習系列常用機器學習演算法知識點及其解析,面試官會考的幾乎都有,歡迎補充

圖片慢慢上傳,看不到圖片的請點這裡: LR:logistic regression  對數機率迴歸/邏輯迴歸 sigmoid函式的作用就是用於把輸出歸一到1和0,也就

面試筆試-c/c++人民搜尋2012校園招聘試題

2012 人民搜尋筆試題: 題目如下(題目都很基礎,但是要拿滿分,或者做到完美,應該還是有一定難度的): 1、列印漢諾塔移動步驟,並且計算複雜度。 2、計算兩個字串的是否相似(字元的種類,和出現次數相同) 3、定義二叉樹,節點值為int,計算二叉樹中的值在[a,b]區

面試常見問題C++指標和引用的區別,有哪些不同點,細細道1

首先咱們弄清楚複合型別(Compound type)這個概念,因為指標和引用是Compound type中的兩種! 引用(reference): 何謂“引用”,這麼說吧,相信每個人都有個乳名,後來等到你升學入職啥的發現乳名B格很Low ! 這時候需要為自己起另外一個名字

面試筆試二叉樹相關操作

// 二叉樹 // 2015.08.07 //@ author :braveji /** 二叉樹的功能 ** 1 建立二叉樹 銷燬二叉樹 ** 2 二叉樹的遍歷:前、中、後,層,分層;遞迴、非遞迴; ** 3 二叉樹的高度、寬度、葉子節點個數 ** 4 將二叉搜尋樹轉換為雙

利用STM32CubeMX來生成USB_HID_Mouse工程添加ADC1

page perf stm32cube ets lar hid data before variable 現在原來的基礎上添加ADC的功能。 現在(利用STM32CubeMX來生成USB_HID_Mouse工程)基礎上新增硬件 JoyStick Shield 遊戲搖桿擴展板

extjs6學習筆記0.1 準備:基礎概念(02)

json over cal 類的屬性 tab 常用事件 data 微軟 基於 Ext 類 Ext 是一個全局單例的對象,在 Sencha library 中它封裝了所有的類和許多實用的方法。許多常用的函數都定義在 Ext 對象裏。它還提供了像其他類中一些頻繁使用的方法

HTTP權威指南1 章 HTTP 概述

1.4 狀態 1.8 網關 資源 ip 地址 gen 歷史 客戶端 1.1 HTTP——因特網的多媒體信使 ...................................................................................

英語初階1月回顧

總結 國外 除了 拓展 gpo 快速 在一起 時也 目標 回顧 四級真題做了一篇,單詞過完了四級,六級過完1/3,聽力無,閱讀幾篇新聞。 結果和改進 百詞斬背單詞挺傻的,當然過一遍混個眼熟也無所謂,不能指望真背完了能用起來 之前幾乎每天倆小時地用百詞斬背單詞,四級復習45

構建之法1章 概論

order ble 可見性 科學 行為 summary 模式 enter strong 1 公式 軟件 = 程序 + 軟件工程 軟件的質量 = 程序的質量 + 軟件工程的質量 程序 = 數據結構 + 算法 軟件企業 = 軟件 + 商業模式 2 軟件的特殊性 復

面試加分項java自己定義註解之解析註解

有一個 構造 ace catch .get doc 做的 document field 我之前的博客中說明過自己定義註解的聲明今天我們來看看怎樣對我們自己定義的註解進

Python3練習題 0201+2!+3!+...+20!的和

sum div spa port ons fun plus 函數 UNC 方法一 import functools sum = 0 for i in range(1,21): sum = sum + functools.reduce(lambda x,y: x

JVM虛擬機1)---常用JVM配置參數

str spa void 經歷 color borde free TE per 常用JVM配置參數 常用JVM配置參數主要有:Trace跟蹤參數、堆的分配參數、棧的分配參數。 一、Trace跟蹤參數 跟蹤參數用於跟蹤監控JVM,對於開發人員