資料備份 set,鍊錶

2021-09-21 14:40:40 字數 2389 閱讀 8169

題目鏈結

題目

你在一家it公司為大型寫字樓或辦公樓的計算機資料做備份。

然而資料備份的工作是枯燥乏味的,因此你想設計乙個系統讓不同的辦公樓彼此之間互相備份,而你則坐在家中盡享計算機遊戲的樂趣。

已知辦公樓都位於同一條街上,你決定給這些辦公樓配對(兩個一組)。

每一對辦公樓可以通過在這兩個建築物之間鋪設網路電纜使得它們可以互相備份。

然而,網路電纜的費用很高。

當地電信公司僅能為你提供 k 條網路電纜,這意味著你僅能為 k 對辦公樓(總計2k個辦公樓)安排備份。

任意乙個辦公樓都屬於唯一的配對組(換句話說,這 2k 個辦公樓一定是相異的)。

此外,電信公司需按網路電纜的長度(公里數)收費。

因而,你需要選擇這 k 對辦公樓使得電纜的總長度盡可能短。

換句話說,你需要選擇這 k 對辦公樓,使得每一對辦公樓之間的距離之和(總距離)盡可能小。

下面給出乙個示例,假定你有 5 個客戶,其辦公樓都在一條街上,如下圖所示。

這 5 個辦公樓分別位於距離大街起點 1km, 3km, 4km, 6km 和 12km 處。

電信公司僅為你提供 k=2 條電纜。

上例中最好的配對方案是將第 1 個和第 2 個辦公樓相連,第 3 個和第 4 個辦公樓相連。

這樣可按要求使用 k=2 條電纜。

第 1 條電纜的長度是 3km-1km=2km ,第 2 條電纜的長度是 6km-4km=2km。

這種配對方案需要總長 4km 的網路電纜,滿足距離之和最小的要求。

輸入格式

第一行輸入整數n和k,其中 n 表示辦公樓的數目,k 表示可利用的網路電纜的數目。

接下來的n行每行僅包含乙個整數s,表示每個辦公樓到大街起點處的距離。

這些整數將按照從小到大的順序依次出現。

輸出格式

輸出應由乙個正整數組成,給出將2k個相異的辦公樓連成k對所需的網路電纜的最小總長度。

資料範圍

2≤n≤100000

1≤k≤n/2

0≤s≤1000000000

輸入樣例:

5 2 13

4612

輸出樣例:

4
題目給了n個點的座標,讓你選k條邊,每個點只能連一條邊,求這k條邊之和最小是多少。

輸入的點的座標是有序的,先進行差分,算出相鄰兩個點的距離。

設這些距離為 x1,x2....xn-1.    那麼題目就轉化成從這n-1個數里取k個數,不能同時取相鄰的兩個,問取k個數之和最小是多少

結論:最優解中,最小值兩側的資料要麼同時選,要麼都不選。  如果同時選了,那麼不選最小值,如果都不選,那麼選最小值。

證明:如果選了最小值,那麼最小值兩側的數自然就不能選了,如果沒選最小值,最小值兩側的資料也都不選,那麼顯然不是最優解。如果只選了最小值旁邊的乙個數字,比如選的是最小值左邊的數,那麼如果我們把左邊這個數換成最小值這個數,顯然更優了。

我們可以將這些數都放到set裡,每次取出乙個最小值ai,然後刪除這個值以及左邊的值ai-1和右邊的值ai+1。然後將ai-1+ai+1-ai插入到set裡。重複k次,答案就是這k次取出的值之和。

如果取出了 ai-1+ai+1-ai這個值,這個值再加上之前取的值ai. 加起來是ai-1 和ai+1之和。就表示取的是兩側的值。

用陣列模擬鍊錶維護位置關係 

#include#include#includeusing namespace std;

typedef long long ll;

const int maxn=1e5+5;

typedef pairp;

sets;

ll a[maxn];

int l[maxn],r[maxn];

void delete_node(int x)

int main()

ll ans=0;

set::iterator it;

while(k--)),s.erase();

delete_node(left),delete_node(right);

ans+=v;

a[x]=a[left]+a[right]-a[x];

s.insert();

}cout<

return 0;

}

BZOJ1150 資料備份 堆 鍊錶

選出的 k kk 組一定相鄰,所以我們預處理出相鄰兩個辦公樓的間距,共 n 1 n 1 n 1 個。問題轉化為挑出 k kk 個元素,使其和盡量小且互不相鄰。假設我們選擇了其中最小的,就不能選其兩邊的 假如我們沒有選擇最小的,就一定會選擇其兩邊的,否則,將選擇的某個換成最小的會更優。建乙個鍊錶和乙個...

備份表 資料

create table 新錶 as select from 舊表 這種方法會將 舊表 中所有的內容都拷貝過來,包括表結構 資料。缺點 新錶中沒有了舊表的primary key extra auto increment 等屬性。需要自己用 alter 新增。方法一 create table 新錶 s...

資料備份表

開發 產品上架需要審核,產品在上架中,如果編輯了產品,又需要審核,但是這時候這件商品就被迫下架,避免這個問題,這時候就需要備份表,產品修改的時候先改備份表,當審核通過可以上架的時候就將備份標的資料移動到正式表上,踩坑 備份表與正常表需要同步資料,主要還是自增主鍵的限制,如果不是自增主鍵,那麼可以隨便...