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 ...