題解 SDOI2016 征途

2022-04-29 22:09:17 字數 1389 閱讀 8695

link

題目大意:給定序列,將它劃分為\(m\)段使得方差最小,輸出\(s^2*m^2\)(乙個整數)。

\(\text\)

這題我通過題解中的大佬部落格學到了一般化方差柿子的寫法。

下面來推柿子:

\[s^2=\frac^n (x_i-\overline)^2}=\frac(\sum_^n x_i^2+n*(\frac^n x_i})^2-2\sum_^n (x_i* \frac^n x_k}))

\]\[s^2=\frac^n x_i^2+\frac^n x_i)^2}-2 \frac^n x_i)^2}}

\]化簡得到:

\[s^2=\frac^n x_i)^2}}

\]兩邊乘以\(n^2\)得到:

\[s^2n^2=n\sum_^n x_i^2 -(\sum_^n x_i)^2=n\sum_^n x_i^2 -sum[n]^2

\]其中\(sum\)是字首和。最後這個柿子裡面,\(n,sum\)都是常數,最終要處理的就是\(\sum_^n x_i^2\).

設\(dp[i][l]\)表示前\(i\)個元素劃分\(l\)次的最小平方和,有:

\[dp[i][l]=\min_\)的時候最好用\(\text\).順序不要搞反。當然這個題主要難點是推方差柿子……\(\text\)

#includeusing namespace std;

#define int long long

int n,m,a[20010],sum[20010];

int dp[4000][4000],tail,head;

int q[200010];

int x(int x)

int y(int x,int p)

long double slope(int x,int y,int p)

//dp[i][l]=dp[j][l-1]+(sum[i]-sum[j])^2

signed main()

} printf("%lld\n",m*dp[n][m]-sum[n]*sum[n]);

return 0;

}

附上推柿子時\(\text\)上的東西:

\(dp[i][l]=dp[j][l-1]+(sum[i]-sum[j])^2\)

\(dp[i]][l]=dp[j][l-1]+sum[i]^2+sum[j]^2-2sum[i]sum[j]\)

\(dp[j][l-1]+sum[j]^2=2sum[i]sum[j]+dp[i][l]-sum[i]^2\)

\(y=dp[j][l-1]+sum[j]^2,k=2sum[i],x=sum[j],b=dp[i][l]-sum[i]^2\)

最小化\(b\),即可

\(ans=-sum[n]^2+m*dp[n][m]\)

SDOI2016 遊戲題解

這道題太噁心了,調了我整整一晚上,結果發現是乙個bi 錯誤,多多捂臉 這道題比之前的題多了乙個初始化和區間查詢的操作,主要是區間查詢噁心 因為要區間查詢,所以必須維護區間最低點,修改和查詢操作被改得面目全非。我們要維護的話,必須從現值,子值,新值,具體的不好多說 看 吧 include define...

筆記篇 斜率優化dp(二) SDOI2016征途

傳 送 門 搜題目名會搜出很多奇怪的東西.這個題目似乎有點毒?比如在bzoj和loj上可以1a的 上會在luogu tle 2個點,在cogs tle 10個點 但是根據已有的資料來看資料都是一樣的.毒瘤評測姬毀我oi 這個題的狀態轉移方程並不是很好推的說.出題人讓 m 2 肯定是有目的的啊.比如不...

SDOI2016 數字配對

傳送門 裸費用流。建邊 對於a i a j pr ime a j a i frac prime a j a i a j a i prim e a j a i 需要i ii向j n j nj n連,並且j jj向i n i ni n連。費用即為c i c j c i c j c i c j 流量無窮大...