P1982 小朋友的數字

2022-07-23 14:45:22 字數 1995 閱讀 9090

有 nn個小朋友排成一列。每個小朋友手上都有乙個數字,這個數字可正可負。規定每個小朋友的特徵值等於排在他前面(包括他本人)的小朋友中連續若干個(最少有乙個)小朋友手上的數字之和的最大值。

作為這些小朋友的老師,你需要給每個小朋友乙個分數,分數是這樣規定的:第乙個小朋友的分數是他的特徵值,其它小朋友的分數為排在他前面的所有小朋友中(不包括他本人),小朋友分數加上其特徵值的最大值。

請計算所有小朋友分數的最大值,輸出時保持最大值的符號,將其絕對值對pp 取模後輸出。

第一行包含兩個正整數 n,pn,p,之間用乙個空格隔開。

第二行包含 nn 個數,每兩個整數之間用乙個空格隔開,表示每個小朋友手上的數字。

乙個整數,表示最大分數對pp取模的結果。

輸入 #1複製

5 997 

1 2 3 4 5

輸出 #1複製

21
輸入 #2複製

5 7 

-1 -1 -1 -1 -1

輸出 #2複製

-1
case 1:

小朋友的特徵值分別為 1,3,6,10,151,3,6,10,15,分數分別為1,2,5,11,211,2,5,11,21,最大值 2121對 997997 的模是 2121。

case 2:

小朋友的特徵值分別為-1,-1,-1,-1,-1−1,−1,−1,−1,−1,分數分別為-1,-2,-2,-2,-2−1,−2,−2,−2,−2,最大值-1−1對 77 的模為-1−1,輸出-1−1。

對於 50\%50%的資料,1 ≤ n ≤ 1,000,1 ≤ p ≤ 1,0001≤n≤1,000,1≤p≤1,000所有數字的絕對值不超過 10001000;

對於 100\%100%的資料,1 ≤ n ≤ 1,000,000,1 ≤ p ≤ 10^91≤n≤1,000,000,1≤p≤10^9,其他數字的絕對值均不超過 10^9。

點這裡收穫更好的閱讀體驗

首先要把題面看懂。。。

長得就很奇怪,其實仔細想想只要區分清楚特徵值和分數就可以了。

對於第i個人來說:

特徵值:求第i個人之前(包括第i個)的最大子段和即為特徵值

分數:第i個人之前(不包括第i個

)的特徵值加上初始數值的最大值

(有點清楚了嗎?)

後面注意求最大子段和的小細節就可以了

#include#include

using

namespace

std;

long

long

int a[1000001],dp[1000001],sco[1000001

],x;

long

long

intn,p,ans;

long

long

read()

while(ch>='

0'&&ch<='9'

)

return f*x;

}int

main()

ans=sco[1]=dp[1

]; maxx=-0x7ffffffff

;

for(int i=2;i<=n;i++)

cout

<

return0;

}

注意細節,先打再看

再看一道名字有點像的題:

題麵點這裡

這題看起來很簡單的亞子。。。

其實就是解決兩個問題:

1.最長不下降子串行的長度

2.1的和

結合**仔細想想就行:

#includeusing

namespace

std;

int a[100001],v[1000001],f[1000001

];int

n;int

main()

}cout

}return0;

}

先打再看

(rp++!)

題解 P1982 小朋友的數字

題目鏈結 題目大意 求 max 其中 f i max d j 表示區間 1,j 內的最大連續子段和 動態規劃 分析 看了題目題目大意,這題顯然還是挺水的吧.我們先看狀態 d 怎麼求 我們設 td i 表示以 i 結尾的最大連續子段和,那麼顯然 td i max td i 1 val i val i ...

洛谷P1982 小朋友的數字

有 n 個小朋友排成一列。每個小朋友手上都有乙個數字,這個數字可正可負。規定每個小朋友的特徵值等於排在他前面 包括他本人 的小朋友中連續若干個 最少有乙個 小朋友手上的數字之和的最大值。作為這些小朋友的老師,你需要給每個小朋友乙個分數,分數是這樣規定的 第乙個小朋友的分數是他的特徵值,其它小朋友的分...

洛谷P1982 小朋友的數字 題解

題目傳送 簡單地說,這題就是讓我們求前i個數的最大子串和和最值。對於最大子串和,我們可以設乙個變數qian,表示以當前元素結尾的最大子串的子串和。若搜尋完第i 1個小朋友,現在看到第i個小朋友時,若qian大於0,就說明以第i 1個小朋友為結尾的最大子串和的值大於0,那麼讓這小朋友連上這個字串的話得...