jzoj3920 噪音 貪心,dp

2021-10-01 07:47:24 字數 1072 閱讀 8798

n

nn頭牛,m

mm個牛棚,可以清空k

kk次。

每頭牛會指定進入乙個牛棚,進入後產生牛棚中牛數量的噪音值,然後清空可以清空乙個牛棚的牛,求最少噪音值。

我們發現每個牛棚是互不干擾的。

我們考慮乙個牛棚有n

nn頭牛要進入,用k−1

k-1k−

1次清空的最小值。我們可以先用k

kk個1∼⌊

nk

⌋1\sim \lfloor \frac\rfloor

1∼⌊kn​

⌋填入,然後剩下n%k

n\%k

n%k個就填⌊nk

⌋+

1\lfloor \frac\rfloor+1

⌊kn​⌋+

1。這個是最優的。

所以我們現在可以o(1

)o(1)

o(1)

求解以上問題後,考慮dpdp

dp。f i,

jf_

fi,j

​表示到第i

ii個牛棚,使用了k

kk次清空時的最小噪音值。然後o(n

k2

)o(nk^2)

o(nk2)

暴力轉移即可。

#include

#include

#include

#define ll long long

using

namespace std;

const ll n=

510;

ll n,m,k,w[n]

,f[n]

[n];

ll val

(ll x,ll k)

intmain()

memset

(f,127

,sizeof

(f))

; f[0]

[0]=

0;for(ll i=

1;i<=m;i++

)printf

("%lld"

,f[m]

[k])

;}

392 判斷子串行

給定字串 s 和 t 判斷 s 是否為 t 的子串行。你可以認為 s 和 t 中僅包含英文小寫字母。字串 t 可能會很長 長度 500,000 而 s 是個短字串 長度 100 字串的乙個子串行是原始字串刪除一些 也可以不刪除 字元而不改變剩餘字元相對位置形成的新字串。例如,ace 是 abcde ...

392 判斷子串行

給定字串s和t,判斷s是否為t的子串行。你可以認為s和t中僅包含英文小寫字母。字串t可能會很長 長度 500,000 而s是個短字串 長度 100 字串的乙個子串行是原始字串刪除一些 也可以不刪除 字元而不改變剩餘字元相對位置形成的新字串。例如,ace 是 abcde 的乙個子串行,而 aec 不是...

392 判斷子串行

給定字串 s 和 t 判斷 s 是否為 t 的子串行。你可以認為 s 和 t 中僅包含英文小寫字母。字串 t 可能會很長 長度 500,000 而 s 是個短字串 長度 100 字串的乙個子串行是原始字串刪除一些 也可以不刪除 字元而不改變剩餘字元相對位置形成的新字串。例如,ace 是 abcde ...