題目:推銷員
思路:貪心。要取到最大的疲勞度只有兩種情況,一是全部取a最大的,二是取乙個遠的,再剩下的取a最大的。
先關於a對於住戶從大到小排序。
定義:
sums[i]:從i到i之後,a+
2*s的最大值
suma[i]:從1到i,2
*s的最大值
sum[i]
:從1到i的a之和
預處理出這三個陣列,列舉x。
考慮第一種情況,由於a是從大到小排過序的,所以答案就是 ∑i=
1xai
+2
×maxi
=1ns
i\sum\limits_^x a_i+2\times\max\limits_^ns_i
i=1∑x
ai+
2×i=
1maxn
si,也就是sum[x]+suma[x]。
第二種情況是∑i=
1x−1
ai
+maxi
=xn(
2×si
+ai)
\sum\limits_^ a_i+\max\limits_^n (2\times s_i+a_i)
i=1∑x−
1ai
+i=
xmaxn
(2×s
i+a
i),即sum[x-1]+sums[x]。
所以 max(sum[x]+suma[x],sum[x-1]+sums[x]) 就是最終的答案
**:
#include
using
namespace std;
#define maxn 100000
#define read(x) scanf("%d",&x)
struct pair
pair
(int xx,
int yy)
bool
operator
<
(const pair& oth)
const};
int n;
pair a[maxn+5]
;int sums[maxn+5]
,suma[maxn+5]
;int sum[maxn+5]
;int
main()
for(
int i=
1;i<=n;i++
)for
(int i=
1;i<=n;i++
)for
(int i=
1;i<=n;i++
)return0;
}
洛谷P2672 NOIP2015普及組第四題
題目描述 阿明是一名推銷員,他奉命到螺絲街推銷他們公司的產品。螺絲街是一條死胡同,出口與入口是同乙個,街道的一側是圍牆,另一側是住戶。螺絲街一共有n家住戶,第i家住戶到入口的距離為si公尺。由於同一棟房子裡可以有多家住戶,所以可能有多家住戶與入口的距離相等。阿明會從入口進入,依次向螺絲街的x家住戶推...
洛谷 P2672 推銷員
阿明是一名推銷員,他奉命到螺絲街推銷他們公司的產品。螺絲街是一條死胡同,出口與入口是同乙個,街道的一側是圍牆,另一側是住戶。螺絲街一共有n家住戶,第i家住戶到入口的距離為si公尺。由於同一棟房子裡可以有多家住戶,所以可能有多家住戶與入口的距離相等。阿明會從入口進入,依次向螺絲街的x家住戶推銷產品,然...
洛谷 P2672 推銷員
題目描述 阿明是一名推銷員,他奉命到螺絲街推銷他們公司的產品。螺絲街是一條死胡同,出口與入口是同乙個,街道的一側是圍牆,另一側是住戶。螺絲街一共有n家住戶,第i家住戶到入口的距離為si公尺。由於同一棟房子裡可以有多家住戶,所以可能有多家住戶與入口的距離相等。阿明會從入口進入,依次向螺絲街的x家住戶推...