BZOJ 2697 特技飛行

2022-05-11 21:48:25 字數 957 閱讀 6927

\(k(1 \le k \le 300)\)種物品,價值分別為\(c_i(0 \le c_i \le 1000)\)。有\(n(1 \le n \le 1000)\)分鐘,每分鐘可以選擇乙個物品\(i\),價值為距離上次選擇該物品的時間 * \(c_i\)。求最大價值。

發現對於一種物品,價值為\(c_i * \sum_^ (t_j-t_) = c_i * (t_a-t_1)\)。\(t_i\)表示第\(i\)次選這個物品的時間。這樣,我們只需要為每乙個物品找到乙個開始和結束時間的時間即可。

由於考慮任意兩種物品及其位置對其它的物品的貢獻無影響,所以我們考慮任意兩種物品。

對於兩種物品\(i, j\),假設\(c_i \ge c_j\),他們開始和結束時間分別為\(l_i, r_i\)和\(l_j, r_j\),則最優解中肯定\(l_i < l_j, r_j < r_i\),證明如下:

首先顯然肯定不可能\(l_j < l_i, r_i < r_j\)。

假設\(l_i < l_j, r_i < r_j\)(\(l_j < l_i, r_j < r_i\)證明類似),則可以證明將\(r_i, r_j\)交換後更優(證明大簡單,略)。

所以我們將物品排序後,乙個個取即可。

所以貪心地取即可

#include using namespace std;

typedef long long ll;

const int n=500005;

int n, k, a[n];

int main()

sort(a+1, a+1+k);

int num=n-1;

ll ans=0;

for(int i=k; i; --i)

ans+=(ll)num*a[i];

num-=2;

} printf("%lld\n", ans);

return 0;

}

bzoj 2697 特技飛行

神犇航空開展了一項載客特技飛行業務。每次飛行長n個單位時間,每個單位時間可以進行一項特技動作,可選的動作有k種,每種動作有乙個刺激程度ci。如果連續進行相同的動作,乘客會感到厭倦,所以定義某次動作的價值為 距上次該動作的時間 ci,若為第一次進行該動作,價值為0。安排一種方案,使得總價值最大。第一行...

bzoj2697特技飛行

bzoj2697特技飛行 題意 n個單位時間,每個單位時間可以進行一項特技動作,可選的動作有k種,每種動作有乙個刺激程度ci。每次動作的價值為 距上次該動作的時間 ci,若為第一次進行該動作,價值為0。求最大總價值。n 1000,k 300。題解 因為如果同個動作做3次,不如只做頭尾兩次更好。所以把...

bzoj2697 特技飛行 貪心

神犇航空開展了一項載客特技飛行業務。每次飛行長n個單位時間,每個單位時間可以進行一項特技動作,可選的動作有k種,每種動作有乙個刺激程度ci。如果連續進行相同的動作,乘客會感到厭倦,所以定義某次動作的價值為 距上次該動作的時間 ci,若為第一次進行該動作,價值為0。安排一種方案,使得總價值最大。第一行...