bzoj 4518 [Sdoi2016]征途 (斜率优化DP)

我犯了sb错误然后调了1个小时......队列写错了

斜率k递增,b取最小值,队列维护凸包即可

f[0]的预处理好像有些奇怪???我把inf调大就过了???

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 #define il inline
 5 #define ll long long
 6 #define N 3010
 7 #define inf 66666666
 8 using namespace std;
 9 //re
10 int n,que[N];
11 ll m,L,f[N][N],a[N],s[N];
12 int gc()
13 {
14     int rett=0,fh=1;char c=getchar();
15     while(c<‘0‘||c>‘9‘){if(c==‘-‘)fh=-1;c=getchar();}
16     while(c>=‘0‘&&c<=‘9‘){rett=(rett<<3)+(rett<<1)+c-‘0‘;c=getchar();}
17     return rett*fh;
18 }
19 il ll yy(int i,int k){return f[i][k]+m*m*s[k]*s[k]+2ll*m*L*s[k]+L*L;}
20 il ll kk(int j){return 2ll*m*m*s[j];}
21
22
23 int main()
24 {
25     freopen("a.in","r",stdin);
26     n=gc(),m=gc();
27     for(int i=1;i<=n;i++) a[i]=gc(),s[i]=s[i-1]+a[i],L+=a[i];
28     int hd,tl;
29     for(int i=1;i<=n;i++) f[0][i]=inf;
30     for(int i=1;i<=m;i++)
31     {
32         hd=tl=1,que[1]=0;
33         for(int j=0;j<=n;j++)
34         {
35             while(hd+1<=tl&&(yy(i-1,que[hd+1])-kk(j)*s[que[hd+1]])<=(yy(i-1,que[hd])-kk(j)*s[que[hd]]))
36                 hd++;
37             f[i][j]=yy(i-1,que[hd])-kk(j)*s[que[hd]]-2ll*m*L*s[j]+m*m*s[j]*s[j];
38             while(hd+1<=tl&&(yy(i-1,j+1)-yy(i-1,que[tl]))*(s[que[tl]]-s[que[tl-1]])<=(yy(i-1,que[tl])-yy(i-1,que[tl-1]))*(s[j+1]-s[que[tl]]))
39                 tl--;
40             que[++tl]=j+1;
41         }
42     }
43     printf("%lld\n",f[m][n]/m);
44     return 0;
45 }

原文地址:https://www.cnblogs.com/guapisolo/p/9697073.html

时间: 2024-08-02 20:15:07

bzoj 4518 [Sdoi2016]征途 (斜率优化DP)的相关文章

bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)

题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜.所以,一段路必须在同一天中走完. Pine希望每一天走的路长度尽可能相近,所以他希望每一天走的路的长度的方差尽可能小. 帮助Pine求出最小方差是多少. 设方差是v,可以证明,v×m^2是一个整数.为了避免精度误差,输出结果时输出v×m^2. In

bzoj4518[Sdoi2016]征途 斜率优化dp

4518: [Sdoi2016]征途 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1657  Solved: 915[Submit][Status][Discuss] Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜.所以,一段路必须在同一天中走完. Pine希望每一天走的路长度尽可能相近,所以

【bzoj4518】[Sdoi2016]征途 斜率优化dp

原文地址:http://www.cnblogs.com/GXZlegend/p/6812435.html 题目描述 Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜.所以,一段路必须在同一天中走完. Pine希望每一天走的路长度尽可能相近,所以他希望每一天走的路的长度的方差尽可能小. 帮助Pine求出最小方差是多少. 设方差是v,可以证明,v×m^2是一个整数.为了避免

[SDOI2016]征途 —— 斜率优化DP

时隔多年没有碰斜率优化了... 想当年被斜率优化虐的死去活来,现在看看...也就那样吧. Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜.所以,一段路必须在同一天中走完. Pine希望每一天走的路长度尽可能相近,所以他希望每一天走的路的长度的方差尽可能小. 帮助Pine求出最小方差是多少. 设方差是v,可以证明,v×m^2是一个整数.为了避免精度误差,输出结果时输出v

BZOJ 4518 [Sdoi2016]征途(分治DP)

[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4518 [题目大意] 给出一个数列,分成m段,求方差最小,答案乘上m的平方. [题解] 化简式子可以发现,就是求将数列分成m段,最小化和的平方和.设dp[i][j]表示处理到第i段,已经用了前j个数的最小代价,我们可以得到dp[i][j]=min(dp[i-1][k]+(s[j]-s[k])2),由于决策单调,可以分治DP. [代码] #include <cstdio> typede

●BZOJ 4518 [Sdoi2016]征途

题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4518 题解: 斜率优化DP 首先看看最后答案的形式: 设a[i]为第i天走的距离,那么 $ANS=\frac{\sum_{i=1}^{M}(a[i]-\overline{x})^2}{M}\times{M^2}$ $\;\qquad=\frac{(\sum_{i=1}^{M}a[i]^2)-2\overline{x}SUM+M\overline{x}^2}{M}\times{M^2}$ $

动态规划(决策单调优化):BZOJ 4518 [Sdoi2016]征途

4518: [Sdoi2016]征途 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 532  Solved: 337[Submit][Status][Discuss] Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜.所以,一段路必须在同一天中走完. Pine希望每一天走的路长度尽可能相近,所以他

【BZOJ4518】[Sdoi2016]征途 斜率优化

[BZOJ4518][Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜.所以,一段路必须在同一天中走完. Pine希望每一天走的路长度尽可能相近,所以他希望每一天走的路的长度的方差尽可能小. 帮助Pine求出最小方差是多少. 设方差是v,可以证明,v×m^2是一个整数.为了避免精度误差,输出结果时输出v×m^2. Inpu

BZOJ 1010 玩具装箱 斜率优化DP

详情见 http://www.cnblogs.com/proverbs/archive/2013/02/01/2713109.html(我觉得这里面讲得已经够详细了,我就不赘述了) 还是来回忆一下做这道题的历程吧!一开始的确有点想错了,但马上又反应过来,清楚了题意.写了个 n^2 的算法.很明显,对于n <=  50000 的数据,肯定是要TLE的.(援引我看博客过程中看到的一句话来形容就是“省选题的数据就是硬”.)没办法,只能上网找百度(太弱了).一开始的确有点茫然,但马上就决定要自己推导一下