給定一行n個非負整數a[1]..a[n]。現在你可以選擇其中若干個數,但不能有超過k個連續的數字被選擇。你的任務是使得選出的數字的和最大。
設\(f(i,0)\)表示考慮到數字\(i\)並選擇\(i\)的最大和,\(f(i,1)\)表示考慮到數字\(i\)並選擇\(i\)的最大和
那麼\[f(i,0)=min(f(i-1,0),f(i-1,1))
\]\[f(i,1)=min(f(j,0)+sum_i-sum_j),i-k\leq j \leq i-1
\]然後就可以單調佇列優化了
#includeusing namespace std;
#define int long long
int const maxn=1e5+10;
int n,k;
int f[maxn][2],e[maxn],q[maxn],d[maxn];
signed main()
int h=0,t=1;
for(int i=1;i<=n;i++)
printf("%lld\n",max(f[n][0],f[n][1]));
return 0;
}
luogu P2034 選擇數字
題面傳送門 對於這道題,簡單粗暴的dpdp dp是不難想的,dpdp dp方程式為fi max fj 1 s j 1i as f i max f sum ia s fi ma x fj 1 s j 1i as 其中max i k 0 j i 1max i k,0 leq j leq i 1 max ...
洛谷P2034 選擇數字
題目描述 給定一行n個非負整數a 1 a n 現在你可以選擇其中若干個數,但不能有超過k個連續的數字被選擇。你的任務是使得選出的數字的和最大。輸入格式 第一行兩個整數n,k 以下n行,每行乙個整數表示a i 輸出格式 輸出乙個值表示答案。乙個小dp 我們設f i 為不選i時候的最優值 然後我寫了個6...
P2034 選擇數字 單調佇列
p2034 選擇數字 單調佇列 gyro永不抽風 最後更新 2020年09月20日 21 09 許可協議 給定一行n個非負整數a 1 a n 現在你可以選擇其中若干個數,但不能有超過k個連續的數字被選擇。你的任務是使得選出的數字的和最大。第一行兩個整數n,k 以下n行,每行乙個整數表示a i 輸出乙...