HDU 1087 最大遞增子串行和

2021-08-04 08:04:15 字數 1030 閱讀 5009

super jumping! jumping! jumping!

題意:無聊的猿發明了「人贏跳跳棋「,規則是要從start->end,中途可以間隔著跳過若干個格仔,但是下一步位置的權值必須大於當前格仔的權值。最後,所經過格仔的權值和大的獲勝。

分析:不連續的最大遞增子串行和問題。當我以第 i 個格仔作為終點時我所能取得的最大和,其子問題是以第 i -1 個格仔為終點時的最大和。情況有兩種,當前 num[ i ] 大於前面 num[ j ] 時,有 dp[ i ] = max(dp[ i ], dp[ j ] + num[ i ]);當前 num[ i ] 小於前面 num[ j ] 時,則dp[ i ] = max(num[ j ], dp[ i ]);

**如下

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

typedef

long

long ll;

ll a[1005],dp[1005];

int main()

ll ans=0;

memset(dp,0,sizeof(dp));

dp[1]=a[1];

for(int i=2;i<=n;i++)else dp[i]=max(dp[i],a[i]);

}//dp[i]=max(dp[i],a[i]);

}sort(dp+1,dp+n+1);

cout

0;}

HDU 1087 求最長遞增子串行的和 DP

題意 這個樣例很誤導人啊,這個題意呢,就是從起點跳到終點,保持遞增跳而且得分最大。注意,起點和終點是不計分的 解析 模板改一下就好了,之前求的是序列長度。這裡求和,那麼只要把dp初始化a 依然還是 每個數選還是不選的問題。轉移方程 if a i a j dp i max dp i dp j a i ...

最大連續序列值(hdu 1087)

題意 輸入乙個長度為n的序列,該序列不一定從小到大排列,但是我們經過的路徑必須從小到大,如果後面的數大於前面的數則終止路徑,最後輸出最大的連續序列值。分析 這是dp的乙個基礎題,我們首先要用value陣列儲存乙個序列,然後用dp陣列儲存目前為止最大的連續序列值,且dp陣列和最終最大值均初始化為序列第...

動態規劃 最大上公升子串行(hdu1087)

題目描述 求乙個序列中 不一定連續 可以跳躍 但是數值遞增的最大和子串行 解題思路 這道題和之前的子串行題不一樣,因為無法判斷當前節點的取捨情況,即1,2,10序列,這個10我未必會選,因為10後面可能是7,8,9 看起來總覺得和揹包問題有什麼聯絡,其實的確差不多。我們先假設 乙個點i,以及某個子最...