題意:
輸入乙個長度為n的序列,該序列不一定從小到大排列,但是我們經過的路徑必須從小到大,如果後面的數大於前面的數則終止路徑,最後輸出最大的連續序列值。
分析:這是dp的乙個基礎題,我們首先要用value陣列儲存乙個序列,然後用dp陣列儲存目前為止最大的連續序列值,且dp陣列和最終最大值均初始化為序列第乙個元素值。
從第2個元素開始,將目前元素值賦給目前最大連續序列,判斷它前面的元素時候小於它(直到它的前乙個元素為止),滿足時判斷前一最大連續序列值和目前元素之和是否大於目前最大連續序列值,若滿足則重新給dp賦值,之後判斷max是否小於dp,若滿足則給max重新賦值。
**如下:
#include
const int n = 1001;
int value[n];//序列中每乙個元素的值
int dp[n];//目前最大的連續序列
int max,n;
int main()
dp[0] = max = value[0];//目前最大連續序列值和最終序列最大值初始化為第乙個序列元素的值
for(int i = 1; i < n; i++)//從第2個序列元素開始,先將值賦給對應的最大連續序列值,從乙個元素開始與之比較,若小於該值,再判斷
//該最大連續序列值是否小於前乙個最大連續序列值和目前序列元素之和,滿足時將該和賦給該最大連續序列,並將目前最大連續序列與
//max比較,若較大,則改變max值,比較直到目前元素前乙個為止
if(max < dp[i])
max = dp[i];
}printf("%d\n",max);
}return 0;
}
HDU 1087 最大遞增子串行和
super jumping!jumping!jumping!題意 無聊的猿發明了 人贏跳跳棋 規則是要從start end,中途可以間隔著跳過若干個格仔,但是下一步位置的權值必須大於當前格仔的權值。最後,所經過格仔的權值和大的獲勝。分析 不連續的最大遞增子串行和問題。當我以第 i 個格仔作為終點時我...
動態規劃 最大上公升子串行(hdu1087)
題目描述 求乙個序列中 不一定連續 可以跳躍 但是數值遞增的最大和子串行 解題思路 這道題和之前的子串行題不一樣,因為無法判斷當前節點的取捨情況,即1,2,10序列,這個10我未必會選,因為10後面可能是7,8,9 看起來總覺得和揹包問題有什麼聯絡,其實的確差不多。我們先假設 乙個點i,以及某個子最...
HDU 最大連續子串行
最大連續子串行 problem description 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子串行元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和為20。在今年的資料結構考卷中,要求編寫程式得到最大和,現在增加乙個要求,即還需要輸出該...