真正的貪心好題
一段區間被取後,旁邊兩端區間不能再取,但我們可以捨棄掉這一段,去取旁邊的兩段
這樣的貪心策略怎麼維護呢?
我們用堆維護貪心,每次選擇這段區間後,將兩邊的區間合併成一段,權值是\(w_+w_-w_i\)
也就是捨棄中間這一段,取兩邊的
但是這樣的做法只能做一次捨棄,事實上我們可能會有多次,然而我們只用推廣一下即可
用乙個雙向鍊錶維護,改變後的權值就是\(w_+w_-w_i\),這對於多個組合同樣適用
注意記錄這個點是否已經被合併掉了
#include#include#include#include#include#includeusing namespace std;
#define reg register
typedef long long ll;
#define rep(i,a,b) for(int i=a,i##end=b;i<=i##end;++i)
#define drep(i,a,b) for(int i=a,i##end=b;i>=i##end;--i)
char io;
int rd()
template inline void cmin(t &a,t b)
template inline void cmax(t &a,t b)
};priority_queue q;
int l[n],r[n];
int ans;
int del[n];
void del(int x)
int main());
}d[1]=d[n+1]=inf;
rep(i,1,k)
ans+=d[t];
d[t]=d[l[t]]+d[r[t]]-d[t];
del(l[t]),del(r[t]);
q.push((node));
}printf("%d\n",ans);
}
APIO CTSC 2007 資料備份
嘟嘟嘟 這竟然是一道貪心題,然而我在不看題解之前一直以為是dp。首先最優的配對一定是相鄰兩個建築物配對,所以我們求出差分陣列,就變成了在n 1個數中選出不相鄰的k個數,使這k個數的和最小。貪心是在回事呢?首先把所有點放在乙個小根堆中,然後如果取出乙個點ai,就把ai 1 ai 1 ai放到小根堆中,...
mysql 冷備 Mysql資料冷備操作方法
定期的備份可使我們資料庫崩潰造成的損失大大降低。在mysql中進行資料備份的方法有兩種,一種是使用mysqldump程式,第二種是使用mysqlhotcopy cp tar或cpio等打包程式直接拷貝資料庫檔案。mysqldump程式備份資料庫較慢,但它生成的文字檔案便於移植。使用mysqlhotc...
資料備分 硬碟篇
硬碟儲存資料是根據電 磁轉換原理實現的。硬碟由乙個或幾個表面鍍有磁性物質的金屬或玻璃等物質碟片以及碟片兩面所安裝的磁頭和相應的控制電路組成 圖1 其中碟片和磁頭密封在無塵的金屬殼中。硬碟工作時,碟片以設計轉速高速旋轉,設定在碟片表面的磁頭則在電路控制下徑向移動到指定位置然後將資料儲存或讀取出來。當系...