20160802 推銷員 貪心 堆

2021-07-16 08:17:20 字數 1083 閱讀 2270

這題最重要的結論就是x=i時的選擇必定包含x=i-1時的所有點。。。這樣我們記錄當前選擇的最遠距離,在其左右分別維護乙個堆,左邊的不算距離,右邊的算距離(要減去當前最遠距離),每次從兩堆頂中選擇最優解,如果更新了最遠距離,就要將右邊堆中這個距離左邊的點都拿出來減去距離扔到左堆裡。重複n次即可。

這個時候再次體現了萬惡的stl資料封裝有多坑,要想直接將某一編號的節點從堆中刪除,只能使用帶有pos的手寫堆。

自己的**:

#include

#define gm 100001

using

namespace

std;

typedef

unsigned

long

long ull;

int n;

int s[gm],a[gm];

ull ans[gm]={};

int lst=0;

struct zh

;void add(int k,const zh &v)

else

break;

}h[x]=v;

p[v.no]=x;

}void del(int k,int popoqqq)

h[x]=v;

p[v.no]=x;

}#define top(k) figr[k]?hp[k][1]:(zh)

int main()

for(int i=1;i<=n;i++) scanf("%d",&a[i]);

for(int i=1;i<=n;i++) add(1,(zh));

for(int i=1;i<=n;i++)

ans[i]+=s2.val-s[lst];

lst=s2.no;

del(1,s2.no);

}else

}for(int i=1;i<=n;i++)

printf("%llu\n",ans[i]);

return

0;}

推銷員(優先佇列 貪心)

2015 noip 普及組 題目描述 阿明是一名推銷員,他奉命到螺絲街推銷他們公司的產品。螺絲街是一條死胡同,出口與入口是同乙個,街道的一側是圍牆,另一側是住戶。螺絲街一共有n家住戶,第i家住戶到入口的距離為si公尺。由於同一棟房子裡可以有多家住戶,所以可能有多家住戶與入口的距離相等。阿明會從入口進...

luogu P2672 推銷員 貪心

題目描述 阿明是一名推銷員,他奉命到螺絲街推銷他們公司的產品。螺絲街是一條死胡同,出口與入口是同乙個,街道的一側是圍牆,另一側是住戶。螺絲街一共有n家住戶,第ii家住戶到入口的距離為si公尺。由於同一棟房子裡可以有多家住戶,所以可能有多家住戶與入口的距離相等。阿明會從入口進入,依次向螺絲街的x家住戶...

普及 NOIP 2015 推銷員 貪心

noip 2015 推銷員 題意 思路 貪心,首先按每戶人家的推銷疲勞度從大到小排序,考慮選定一組,走路帶來的疲勞度是定的,就是最遠那個 2.所以對於每個答案 max sum i mx 2 sum i 1 h i 其中sum是排序後對推銷疲勞度做的字首和,而h i 儲存 從 i 到 n中,最大的 2...