【省內訓練2018-10-26】遊走
阿新 • • 發佈:2018-11-19
【思路要點】
- 考慮一個指數暴力,首先列舉每一個位置選擇 “見好就收” 還是 “得寸進尺” 。
- 記 表示從 出發的期望收益。若在 處選擇 “見好就收” ,那麼 ,否則,令 之前第一個選擇 “見好就收” 的點為 ,之後第一個選擇 “見好就收” 的點為 ,有 。
- 式的證明:
由題, ,即 , 形成一個等差數列。
而 ,因此 可以由等差數列的性質計算得到。- 因此,若我們選擇的一系列點為 ,在 之間的點 的 恰好為 連線的橫座標為 處的縱座標,而方案的優劣直觀地體現於 形成圖形的面積的大小。
- 不難發現,選擇一個凸殼是最優的。
- 時間複雜度 。
【程式碼】
#include<bits/stdc++.h> using namespace std; const int MAXN = 5e5 + 5; const int P = 998244353; typedef long long ll; typedef long double ld; typedef unsigned long long ull; template <typename T> void chkmax(T &x, T y) {x = max(x, y); } template <typename T> void chkmin(T &x, T y) {x = min(x, y); } template <typename T> void read(T &x) { x = 0; int f = 1; char c = getchar(); for (;