洛谷 p2672 推銷員

2022-02-19 20:25:35 字數 1100 閱讀 7009

推銷員【題目鏈結】

好了為了湊字數先把題目複製一下:

好了題解第一篇正解:

首先輸入,莫得什麼好說的:

scanf("

%d",&n);

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

scanf("%d

",&a[i].s);

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

scanf("%d

",&a[i].v);

然後是思路:

對於每乙個x,我們有兩種選擇:

①選擇前x個a值最大的;

②選擇前x-1個a值最大的,再在x~n中選擇乙個s[i]*2+a[i]最大的。

先按照a從大到小排序;

然後陣列q[i]記錄前i項的a的和;

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

q[i]=q[i-1]+a[i].v;

陣列h[i]記錄a[i]*2+s[i]後i項的最大值(也就是為了應對情況②)

for (int i=n;i>=1;i--)

h[i]=max(h[i+1],2*a[i].s+a[i].v);

陣列qm[i]記錄前i項的s的最大值;

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

qm[i]=max(qm[i-1],a[i].s);

答案就是max(q[x]+2*qm[x],q[x-1]+h[x])

對於為什麼只取乙個後i個,你想啊,只有最遠到達的地點的s會對最終答案產生影響,而且其實這裡q[x-1]+h[x]並不一定是實際答案,如果前x-1個中s有乙個sd大於我們h[i]中取的si,我們本應該用sd來計算答案,但這個題是用si來計算,這樣不會對真實的答案造成影響。

洛谷 P2672 推銷員

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

洛谷 P2672 推銷員

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

洛谷 P2672 推銷員

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