有一張桌子,有n個腿。第i根腿的長度是li。
現在要拿掉一些腿,使得桌子穩定,拿掉第i根腿需要di的能量。
穩定的條件是,假如拿掉若干條腿之後,桌子還有k個腿,那麼長度最長的腿的數目要超過一半。比如桌子有5根腿,那麼至少要有三根腿是最長的。另外,只有一根腿的桌子是穩定的,兩個腿的桌子想要穩定,必需長度是一樣的。
你的任務是拿掉若干腿,使得桌子穩定,並且所消耗的能量要最少。
可以列舉以多少高度為最高,顯然所有大於它的桌腿都要拿掉,並在小於它的桌腿中拿掉一些使它的數量最大,可以考慮從大到小列舉最高的高度,然後用線段樹維護求前k小(雖然可以不用線段樹)。
#include
#include
#include
#define maxn 100006
#define ll long long
using namespace std;
inline char nc()
inline int _read()
int n,tot,a[maxn],lnk[maxn],nxt[maxn],son[maxn],num[maxn];
ll ans,sum[maxn];
struct datatree[maxn*4];
void build(int p,int l,int r)
void update(int p,int t,int k)
update(p<<1,t,k);update(p<<1|1,t,k);
tree[p].sum=tree[p<<1].sum+tree[p<<1|1].sum;
tree[p].num=tree[p<<1].num+tree[p<<1|1].num;
}ll query(int p,int k)
void add(int x,int y)
int main()
printf("%lld\n",ans);
return
0;}
51Nod 1530 穩定方塊
acm模版 很巧妙的利用兩個堆來搞事情,乙個大頂堆,乙個小頂堆,就是優先佇列,維護每次能夠拆除的方塊兒,每拆除乙個向周圍擴充套件一次,並且刪除拆掉的這個方塊兒,這裡用 ma p 處理。說白了,就是乙個有趣的貪心問題,用到兩種資料結構罷了,st l include include include in...
51nod 貪心入門
有若干個活動,第i個開始時間和結束時間是 si,fi 活動之間不能交疊,要把活動都安排完,至少需要幾個教室?分析 能否按照之一問題的解法,每個教室安排盡可能多的活動,即按結束時間排序,再貪心選擇不衝突的活動,安排乙個教室之後,剩餘的活動再分配乙個教室,繼續貪心選擇 反例 a 1,2 b 1,4 c ...
51nod 迷宮問題
1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...