C 梅花樁演算法題

2021-10-06 21:06:23 字數 2007 閱讀 6025

題目描述

redraiment是走梅花樁的高手。redraiment總是起點不限,從前到後,往高的樁子走,但走的步數最多,不知道為什麼?你能替redraiment研究他最多走的步數嗎? 

樣例輸入

2 5 1 5 4 5

樣例輸出

提示example: 

6個點的高度各為 2 5 1 5 4 5 

如從第1格開始走,最多為3步, 2 4 5 

從第2格開始走,最多只有1步,5 

而從第3格開始走最多有3步,1 4 5 

從第5格開始走最多有2步,4 5

所以這個結果是3。

介面說明

方法原型:

int getresult(int num, int pinput, list  presult);

輸入引數:

int num:整數,表示陣列元素的個數(保證有效)。

int pinput: 陣列,存放輸入的數字。

輸出引數:

list presult: 保證傳入乙個空的list,要求把結果放入第乙個位置。

返回值:

正確返回1,錯誤返回0

輸入多行,先輸入陣列的個數,再輸入相應個數的整數

輸出結果

示例1複製

625

1545

複製

3
題目分析:

本題是乙個典型的動態規劃演算法應用的問題。

dp全稱是dynamic programming,這裡programming不是程式設計,是乙個**儲存之前的結果。

dp 是一種程式設計思想,主要用於解決最優解型別的問題。

其思路是為了求解當前的問題的最優解,使用子問題的最優解,然後綜合處理,最終得到原問題的最優解。

解題思路:

建立乙個陣列,專門用來存放以i結尾的最大的公升序的子串行的元素個數。

比如2 5 1 5 4 5

對應的相應位置的最大子串行,及元素個數為

第乙個子串行為,長度為1

2                    1

第二個子串行,將前面1個元素對比。因為5 > 2,所以

位置2處的最大子串行長度為2。子串行為2 5

2 5                 2

以位置3處元素結尾的最大子串行,因為前面的元素都比1小。所以

位置3處的最大子串行長度為1。子串行為1

1                    1

位置4處的最大子串行長度為2。子串行為2 5

2 5                 2

位置5處的最大子串行長度為2。子串行為2 4

2 4                 2

位置6處的最大子串行長度為3。子串行為2 4 5

2 4  5               3

將位置6處的元素與前面5個位置處的元素挨個比較。儲存最大值。

和位置1處的元素比較以後,最大值為1+1。

和位置5處的元素比較以後,最大值為2+1。

記錄最大值即可。結果為3。

當最大值元素變更時,相應變更系統最大的步數。

#include #include using namespace std;

int main()

int max = 0;

for(int i = 1; i < arr.size(); i++)}}

step[i] = step_max;

if(step_max > max)

}arr.clear();

step.clear();

cout << max << endl;

}return 0;

}

動態規劃系列之四梅花樁問題

redraiment是走梅花樁的高手。redraiment總是起點不限,從前到後,往高的樁子走,但走的步數最多,不知道為什麼?你能替redraiment研究他最多走的步數嗎?例如梅花樁的高度 2 5 1 5 4 5結果分析 6個點的高度各為 2 5 1 5 4 5 如從第1格開始走,最多為3步,2 ...

梅花樁詳細分析圓內貪心思路 dfs

問題描述 小明每天都要練功,練功中的重要一項是梅花樁。小明練功的梅花樁排列成 n 行 m 列,相鄰兩行的距離為 1,相鄰兩列的距離也為 1。小明站在第 1 行第 1 列上,他要走到第 n 行第 m 列上。小明已經練了一段時間,他現在可以一步移動不超過 d 的距離 直線距離 小明想知道,在不掉下梅花樁...

演算法題C (三)

本部落格目錄 給定乙個單向鍊錶的頭節點head,節點的值型別是整型,再給定乙個整數p。實現乙個調整鍊錶的函式,將鍊錶調整為左部分都是值小於 p的節點,中間部分都是值等於p的節點,右部分都是值大於 p的節點。空間複雜度為o n 的演算法 建立輔助陣列,先在陣列上排序,之後連線 空間複雜度o n lis...