NC15553 數學考試

2022-06-15 23:21:38 字數 788 閱讀 9501

題意:總共n道題,每道題的得分是ai,從中選取兩個不相交且長度分別為k的區間的題目來做,保證得到的分數盡可能的多。

思路:1:假演算法: 簡單貪心,先從n個選取乙個長度為k且區間和最大的區間,然後在此區間左右兩側選擇另乙個長度為k且區間和最大的區間(可能資料比較水,如果有另外兩個區間的和大於本演算法所選取的區間呢?)複雜度o(n)

2:坑點:n個整數中有負數,導致最大分數可能是負數,所以最大分數預設值要設為極小負數。

反思:真演算法中的遍歷方法相當於把兩個for迴圈優化成了乙個for迴圈,對於兩個k區間一定是乙個在左邊乙個在右邊,結果一定是兩個區間和最大的結果,並非假演算法的結果。

假演算法:

#include#includeusing namespace std;

long long a[(int)2e5+5]=;

int main ()

if(n<=2*k)printf("%lld\n",a[n]);

else

}int l=r-k+1;

for(int i=1;i+k-1真演算法:

#includeusing namespace std;

long long a[(int)2e5+5];

int main ()

long long ff=-99999999999999,ss=ff;

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

cout<}

return 0;

}

牛客 NC15553 數學考試

思路 先把字首和求出來.類似於dp,當前節點為i的時候,我們要記錄下i之前的連續k個數和的最大值lmax.這就是第一段 然後讓j i k,讓rmax a j a i 這樣然後max max max,lmax rmax 這樣的複雜度是o n 看 include include include incl...

數學考試dp

來自 先是read 函式,用於快速讀入,比cin快,比printf快 int read ch getchar while ch 0 ch 9 return x f 呼叫函式的時候定義乙個新變數 比如輸入乙個t,表示測試次數 int t t read 接下來是看題幹,兩個不連續的區間 區間長度為k i...

數學考試(差分)

今天qwb要參加乙個數學考試,這套試卷一共有n道題,每道題qwb能獲得的分數為ai,qwb並不打算把這些題全做完,他想選總共2k道題來做,並且期望他能獲得的分數盡可能的大,他準備選2個不連續的長度為k的區間,即 l,l 1,l 2,l k 1 r,r 1,r 2,r k 1 r l k input ...