有乙個長度為
n 的正整數陣列
a,滿足ai
≥ai+
1 ,現在構造乙個陣列
b ,令bi
=∑in
ai。 現在,有乙個n∗
n 的網格圖,左下角座標是(1
,1) ,右上角座標是(n
,n) 。有乙個人正在座標為(n
,1) 的位置,每一時刻,如果他現在在(x
,y) ,他可以選擇走到(x
−1,y
+1) 或者(x
,⌊y2
⌋),如果選擇後者,他要支付bx
的代價。
現在他想走到(1
,1) ,你可以告訴他他支付的代價最少是多少嗎?注意在任何時候他都不能離開這個網格圖。
引用題解:
這個問題的答案就是陣列 a 中所有元素的哈夫曼樹的權值。用priority_queue略慢…建議用make_heap因為陣列是有序的,所以在哈夫曼樹中的深度一定是單調不減的。我們考慮每乙個位置,把fi
,j看成現在已經放入了下標比
i 小的所有節點,剩餘的葉子節點有
j個。
那麼我們每一次有兩種選擇,
第一種是把所有葉子節點都擴充套件出兩個後繼,這時剩下所有節點的深度都增加了
1 ,所以付出的代價是 ∑k
=i+1
nak,狀態變成了 f2
∗i,j
; 第二種是把第
i 個數填在乙個葉子上,這時狀態變成了 fi
+1,j
−1。最終的答案就是 mi
n(fn
+1,k
),(k
>0)
。 我們把這個 dp 過程倒過來,就變成了題目中描述的走路的樣子。所以只需要求哈夫曼樹就好了,這是經典演算法(合併果子)。
#include
#include
using
namespace
std;
typedef
long
long ll;
const
int n = 1e5 + 10;
int n,a[n];
priority_queue< ll , vector
, greater> s;
int main()
ll ans = 0;
for (int i = 1;i < n;i ++)
printf("%lld\n",ans);
}}
JZOJ 4210 我才不是蘿莉控呢!
題目名我已經無力吐槽。a 你是蘿莉控嗎?b 我給你道題目吧!有乙個長度為 n 的正整數陣列 a,滿足ai ai 1,現在構造乙個陣列 b 令bi nj ibj 現在,有乙個n n 的網格圖,左下角座標是 1 1 右上角座標是 n n 有乙個人正在座標為 n 1 的位置,每一時刻,如果他現在在 x y...
五校聯考1day1 我才不是蘿莉控呢
小y 小r 你是蘿莉控嗎。小r 為了避免這個尷尬的話題,小r 決定給小y 做一道題。有乙個長度為n 的正整數陣列a,滿足ai ai 1,現在構造乙個陣列b,令bi 現在,有乙個n n 的網格圖,左下角座標是 1,1 右上角座標是 n,n 有乙個小sb正在座標為 n,1 的位置,每一時刻,如果他現在在...
快速冪 HRBUST 2263 蘿莉控型提督
time limit 1000 ms memory limit 32768 k愚蠢的小林作為乙個蘿莉控型提督,立志要建立一支強大的由蘿莉艦娘組成的遠洋艦隊。眾所周知的是,在 艦隊collection 中一支艦隊是由最多6只不同的船組成的。作為小林的朋友,聰明又機智的小t發現了乙個遊戲裡的bug。這樣...