選擇數字(codevs 3327)

2022-05-14 16:48:03 字數 925 閱讀 3131

題目描述 description

給定一行n個非負整數a[1]..a[n]。現在你可以選擇其中若干個數,但不能有超過k個連續的數字被選擇。你的任務是使得選出的數字的和最大。

輸入描述 input description

第一行兩個整數n,k

以下n行,每行乙個整數表示a[i]。

輸出描述 output description

輸出乙個值表示答案。

樣例輸入 sample input

5 25 

樣例輸出 sample output

資料範圍及提示 data size & hint

對於20%的資料,n <= 10

對於另外20%的資料, k = 1

對於60%的資料,n <= 1000

對於100%的資料,1 <= n <= 100000,1 <= k <= n,

0 <= 數字大小 <= 1,000,000,000

/*

設f[i]為取前i件物品的最大價值,因為不能連續取k件,所以f[i]的狀態可由j∈[i-k+1,i]轉移來。直接寫暴力的dp會超時,由於i的狀態與i-k及之前的沒有關係了,所以可以用單調佇列優化。

*/#include

#include

#define m 100010

#define ll long long

using

namespace

std;

ll sum[m],f[m],d[m],q[m];

int n,k,head=0,tail=1

;void put(int

j)int

main()

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

cout

<

return0;

}

view code

2210 數字組合 codevs

時間限制 1 s 空間限制 32000 kb 題目等級 gold 題目描述 description 在n個數中找出其和為m的若干個數。先讀入正整數n和m,再讀入n個正數 可以有相同的數字,每個數字均在1000以內 在這n個數中找出若干個數,使它們的和是m,把滿足條件的數字組合都找出來以統計組合的個數...

codevs 1085 數字遊戲

codevs 1085 數字遊戲 題目大意 在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使你所得的k最大或者最小。dp i j k 表示i到j分成k個部分的最大值 dp i j k max 注意先將...

Codevs 1229 數字遊戲

時間限制 1 s 空間限制 128000 kb 題目等級 silver lele 最近上課的時候都很無聊,所以他發明了乙個數字遊戲來打發時間。這個遊戲是這樣的,首先,他拿出幾張紙片,分別寫上0到9之間的任意數字 可重複寫某個數字 然後,他叫同學隨便寫兩個數字x和k。lele要做的事情就是重新拼這些紙...