題目描述
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...