BZOJ4518 [Sdoi2016]征途
裸斜率優化
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<iomanip> #include<cstring> #include<cmath> #include<ctime> #include<vector> #include<stack> #include<queue> #include<set> #include<bitset> #include<map> using namespace std; #define MAXN 3010 #define MAXM 10010 #define INF 1000000000 #define MOD 1000000007 #define ll long long #define eps 1e-8 ll f[MAXN][MAXN]; ll a[MAXN]; ll s[MAXN]; int q[MAXN][MAXN]; int hd[MAXN],tl[MAXN]; int n,m; double xl(int x,int y,int z){ z--; return 1.0*(f[x][z]-f[y][z]+s[x]*s[x]-s[y]*s[y])/(s[x]-s[y]); } int main(){ int i,j,k; scanf("%d%d",&n,&m); for(i=1;i<=n;i++){ scanf("%lld",&a[i]); } int tot=0; for(i=1;i<=n;i++){ if(a[i]!=0){ a[++tot]=a[i]; } s[i]=s[i-1]+a[i]; } n=tot; q[1][++tl[1]]=0; for(i=1;i<=n;i++){ for(j=1;j<=min(m,i);j++){ while(hd[j]<tl[j]&&xl(q[j][hd[j]+1],q[j][hd[j]],j)<2*s[i]){ hd[j]++; } k=q[j][hd[j]]; f[i][j]=f[k][j-1]+(s[i]-s[k])*(s[i]-s[k]); if(j==m){ continue ; } while(hd[j+1]<tl[j+1]&&xl(q[j+1][tl[j+1]-1],q[j+1][tl[j+1]],j+1)>xl(q[j+1][tl[j+1]],i,j+1)){ tl[j+1]--; } q[j+1][++tl[j+1]]=i; } } printf("%lld\n",f[n][m]*m-s[n]*s[n]); return 0; } /* 10 3 1 2 3 4 5 6 7 8 9 10 */
相關推薦
bzoj4518: [Sdoi2016]征途(DP+決策單調性分治優化)
clas code -1 long long lib fine bsp char click 題目要求... 化簡得... 顯然m和sum^2是已知的,那麽只要讓sigma(si^2)最小,那就變成了求最小平方和的最小值,經典的決策單調性,用分治優
bzoj4518: [Sdoi2016]征途
化簡 class freopen print log style long 征途 ont 第一眼看到這題的想法:這不就是一題傻逼DP嗎。。。水經驗 然而……誒誒誒DP怎麽寫 %了題解(還被嘲諷%題解比自己AC還多)原來是式子化簡錯了(囧orz
bzoj4518[Sdoi2016]征途 斜率優化dp
必須 out 兩個 sam gen -- double http pos 4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1657 Solved: 915[Submit][Stat
[BZOJ4518][Sdoi2016]征途(斜率優化dp)
題目描述 傳送門 題解 題目讓求v∗m2別有用心啊 令ai表示每天走的路程和,si表示前i段路程的字首和 ans=m2∗1m[∑i=1m(ai−snm)2] =m(∑i=1ma2i+s2
BZOJ4518 [Sdoi2016]征途
裸斜率優化#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm&g
bzoj4518 [Sdoi2016]征途(斜率優化dp)
分析: 斜率優化dp 很多人做斜率優化的時候喜歡畫出斜率 我偏向畫柿子 題目就是把若干個元素分成m份, 每一份的價值是該組中的元素之和 使得m組數的方差最小 平均數:x=(sum[1]+sum[2]+..+sum[m])/m //sum是
[luogu4072][bzoj4518][SDOI2016]征途
line 斜率 amp %d bits can long ems spa 題目分析 Pine開始了從S地到T地的征途。 從S地到T地的路可以劃分成n段,相鄰兩段路的分界點設有休息站。 Pine計劃用m天到達T地。除第m天外,每一天晚上Pine都必須在休息站過夜。所以,一段路
【bzoj4518】[Sdoi2016]征途 斜率優化dp
end 時間復雜度 leg size cpp print ++ 需要 () 原文地址:http://www.cnblogs.com/GXZlegend/p/6812435.html 題目描述 Pine開始了從S地到T地的征途。 從S地到T地的路可以劃分成n段,相鄰兩段路的
【BZOJ4518】[Sdoi2016]征途 斜率優化
輸出 博客 征途 get memset targe 兩個 scan 詳細 【BZOJ4518】[Sdoi2016]征途 Description Pine開始了從S地到T地的征途。 從S地到T地的路可以劃分成n段,相鄰兩段路的分界點設有休息站。 Pine計劃用m天
●BZOJ 4518 [Sdoi2016]征途
times iostream min problem return scanf 斜率優化dp body nbsp 題鏈: http://www.lydsy.com/JudgeOnline/problem.php?id=4518 題解: 斜率優化DP 首先看看最後答案
【筆記篇】斜率優化dp(二) SDOI2016征途
不能 最小化 征途 這樣的 string cpp mar logs -s =======傳=送=門======= 搜題目名會搜出很多奇怪的東西... 這個題目似乎有點毒? 比如在bzoj和loj上可以1A的代碼上會在luogu TLE 2個點, 在cogs TLE 10個
[SDOI2016]征途
show 前綴和 表示 lin .com 前綴 pre ans fin [SDOI2016]征途 題目 思路 這題目很繞(其實也還好)。 首先讓我們看看要求的到底是什麽。 \[ans=m^2\times s^2(s^2為方差)\] 定義\(v\)為每一段的平均數,\(b_i
【題解】SDOI2016征途
ble efi getc code pri color AI define swap 就放個代碼吧……實在是太套路了。不過據說有復雜度還要低很多的算法,不知道是怎麽做呀…… #include <bits/stdc++.h> using namespace
斜率優化實現初步(7) [BZOJ][4518][Sdoi2016]征途
sdi 斜率優化 ons style efi its space pre print #include<bits/stdc++.h> using namespace std; //#define int long long const int
洛谷P4072 [SDOI2016]征途(斜率優化)
傳送門 tps double nbsp ble esp 就是 int turn 傳送門 推式子(快哭了……)$$s^2*m^2=\sum _{i=1}^m (x_i-\bar{x})^2$$ $$s^2*m^2=m*\sum _{i=1
bzoj 4518 [Sdoi2016]征途 (斜率優化DP)
nbsp lld tchar || algo 奇怪 freopen namespace urn 我犯了sb錯誤然後調了1個小時......隊列寫錯了 斜率k遞增,b取最小值,隊列維護凸包即可 f[0]的預處理好像有些奇怪???我把inf調大就過了??? 1 #inclu
洛谷4072 SDOI2016征途 (斜率優化+dp)
首先根據題目中給的要求,推一下方差的柿子。 \[v\times m^2 = m\times \sum x^2 - 2 \times sum \times sum +sum*sum\] 所以\(ans = v*m^2 = m\times \sum x^2 - sum*sum\) 那我們實際上就是最大化平方
luoguP4072 [SDOI2016]征途
[SDOI2016]征途 大體 大概就是推推公式,發現很傻逼的\(n^3\)DP get60 進一步我們發現狀態不能入手,考慮優化轉移 套個斜率優化板子 每一層轉移來一次斜率優化 思路 先便便式子 \[s^2=m^{2}*\frac{\sum_{1}^{m}(a_{i}-\overline{a})^2
bzoj 4518: [Sdoi2016]征途
題意:把n段路分成m天走,求每天走的路程的方差的最小值。輸出方差*m^2。 題解:斜率優化 我們先推一推公式。v×m2=∑mi=1(xi−x¯)2m×m2=∑i=1m(x2i−2xix¯+x¯2)×
4518: [Sdoi2016]征途|斜率優化
裸的斜率優化。。我考場上SB寫暴力 #include<algorithm> #include<iostream> #include<complex> #includ