藍橋模擬 任務序列2

2021-09-12 11:42:07 字數 1014 閱讀 3192

思路:很明顯的dp,但是很遺憾,就是不會做。該題的做法個人感覺是最大子串行和的擴充套件,拓寬到了3維狀態。

第二維表示當前選的是第幾段,第三維標記當前任務是否要取。

所以  每個位置遍歷三段

dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1])   //當前任務不選繼承最值

dp[i][j][1]=max(dp[i][j][1],dp[i-1][j][1]+p[i])    //當前任務選擇 取最值

同時為了避免單點情況,在j>=1時 需要進行特判, dp[i][j][1]=max(dp[i][j][1],max(dp[i-1][j-1][0],dp[i-1][j-1][1])+p[i])

// 雖然每段前的最值是定值,但內層的段遍歷時該位置斷點值也進行了更新,所以需要用2層max去最值。

需要注意的是1 2 3 -1 -1 -1 -1這種單個任務為段的情況,需要在內部迴圈中加上斷點的特判。

**如下:

#include#include#include#include#include#include#include#include#define per(i,a,b) for(int i=a;i<=b;++i)

#define rep(i,a,b) for(int i=a;i>=b;--i)

#define inf 0x3f3f3f

#define ll long long int

using namespace std;

int dp[1000005][3][2];

int p[1000005];

int main()

} cout<

return 0;

}

藍橋杯校內模擬值序列

問題描述 小明想知道,滿足以下條件的正整數序列的數量 第一項為 n 第二項不超過 n 從第三項開始,每一項小於前兩項的差的絕對值。請計算,對於給定的 n,有多少種滿足條件的序列。輸入格式 每一行包含乙個整數n。輸出格式 輸出乙個整數,表示答案。答案可能很大,請輸出答案除以10000的餘數。樣例輸入 ...

藍橋杯模擬題 擺動序列

問題描述 如果乙個序列的奇數項都比前一項大,偶數項都比前一項小,則稱為乙個擺動序列。即 a 2i a 2i 小明想知道,長度為 m,每個數都是 1 到 n 之間的正整數的擺動序列一共有多少個。輸入3 4 輸出14 include using namespace std int a 1010 1010...

十一屆藍橋模擬 擺動序列

問題描述 如果乙個序列的奇數項都比前一項大,偶數項都比前一項小,則稱為乙個擺動序列。即 a 2i a 2i 小明想知道,長度為 m,每個數都是 1 到 n 之間的正整數的擺動序列一共有多少個。輸入格式 輸入一行包含兩個整數 m,n。輸出格式 輸出乙個整數,表示答案。答案可能很大,請輸出答案除以100...