施魔法(線性dp)

2021-10-02 15:31:58 字數 832 閱讀 3469

題目傳送門

作為乙個蒟蒻,總是因為找不到狀態轉移方程而懷疑自己的智商。。我可能真的智商不夠qaq

題目大意是每次選乙個元素個數至少為k的區間,然後它的花費是這個區間的極差(max-min),讓你求最小花費。

求最優解,下意識想到動態規劃問題,但是我練題不夠,沒有想到狀態轉移方程,只好賽後補題。 **

#include

using

namespace std;

const

int n=

3e5+5;

const

int mod=

1e9+7;

const

int inf=

0x3f3f3f3f

;const

double eps=

1e-6

;typedef

long

long ll;

#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

//#define int long long

ll a[n]

,dp[n]

;signed

main()

sort

(a+1

,a+n+1)

;memset

(dp,inf,

sizeof dp)

; dp[k]

=a[k]

-a[1];

for(

int i=k+

1;i<=n;i++

) cout<<}

演算法 線性篩質數

輸出從0 00到1000000 1000000 100000 0的所有質數。首先0 00和1 11不是質數,從2 22開始逐個判斷是否為質數。如果t tt為質數,那麼對於任意正整數k kk,k t k times t k t不是質數,因此可以將k t k times t k t篩去。如果t tt已經...

ACM演算法 線性篩

應用 判斷是否為素數 第乙個想法 普通優化,對數字加根號遍歷。不夠優秀 第二個想法 如果我們知道乙個數是素數,那麼我們可以將這個素數的倍數篩去。我們從2開始,每次迴圈到乙個數,先判斷它是否被篩過,如果沒有,那麼它肯定是素數,就用它去篩它的倍數,否則就跳過。上述的篩法稱為 複雜度大約為nln n 這個...

分治法 線性時間選擇

演算法思想 利用快速排序的方法將a p r 被劃分成兩個子陣列a p i 和a i 1 r 使a p i 中的每個元素都不大於a i 1 r 中每個元素。接著演算法計算子陣列a p i 中元素個數j。如果k j,則第k小的數落在左區間,否則落在右區間,直到k j時,找到第k小的數。對於有重複數字的無...