[bzoj4518] [Sdoi2016]征途

  斜率优化。。因为要求方差乘m^2...也就是每段距离与平均值的平方和再乘m。

  f[i][j]表示i天后,走了j段的最小平方和。

  求出最小平方和再乘个m就行了= =

  需要注意,是可以停留在原地的。。。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<cmath>
 6 #define d double
 7 #define ll long long
 8 using namespace std;
 9 const int maxn=3023;
10 int i,j,k,n,m,now,pre,l,r;
11 ll pr[maxn],V[maxn];
12 int dl[maxn];
13 d f[2][maxn],v1[maxn];
14
15
16 int ra,fh;char rx;
17 inline int read() {
18     rx=getchar(),ra=0,fh=1;
19     while((rx<‘0‘||rx>‘9‘)&&rx!=‘-‘)rx=getchar();
20     if(rx==‘-‘)fh=-1,rx=getchar();
21     while(rx>=‘0‘&&rx<=‘9‘)ra*=10,ra+=rx-48,rx=getchar();return ra*fh;
22 }
23 inline d xl(int k1,int k2){//k1<k2
24     return (d)(f[pre][k2]-f[pre][k1]+V[k2]-V[k1])/(pr[k2]-pr[k1]);
25 }
26 inline d sqr(d x){return x*x;}
27 int main(){
28     n=read(),m=read();
29     for(i=1;i<=n;i++)pr[i]=pr[i-1]+read(),V[i]=pr[i]*pr[i];
30     d avg=(d)pr[n]/m;
31     for(i=0;i<=n;i++)f[0][i]=sqr(pr[i]-avg),v1[i]=(pr[i]-avg);
32     now=1,pre=0;
33     for(i=2;i<=m;i++,swap(now,pre)){
34         l=1,r=0;
35         for(j=0;j<=n;j++){
36             while(l<r&&xl(dl[r-1],dl[r])>=xl(dl[r],j))r--;
37             dl[++r]=j;
38             while(l<r&&2*v1[j]>=xl(dl[l],dl[l+1]))l++;
39             f[now][j]=f[pre][dl[l]]+sqr(v1[j]-pr[dl[l]]);
40         }
41     }
42     printf("%lld\n",(ll)(f[pre][n]*m+0.5));
43     return 0;
44 }

时间: 2024-11-05 06:21:47

[bzoj4518] [Sdoi2016]征途的相关文章

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+斜率优化)

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

[luogu4072][bzoj4518][SDOI2016]征途

题目分析 Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜.所以,一段路必须在同一天中走完. Pine希望每一天走的路长度尽可能相近,所以他希望每一天走的路的长度的方差尽可能小. 帮助Pine求出最小方差是多少. 分析 比较简单的斜率优化. \[f[i][j]=min(f[k][j-1]+m(sum[i]-sum[j])^3-s\times s_n(s_i-s_j))\

【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-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

【BZOJ-4518】征途 DP + 斜率优化

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

动态规划(决策单调优化):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希望每一天走的路长度尽可能相近,所以他

[Sdoi2016]征途

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

luoguP4072 [SDOI2016]征途

[SDOI2016]征途 大体 大概就是推推公式,发现很傻逼的\(n^3\)DP get60 进一步我们发现状态不能入手,考虑优化转移 套个斜率优化板子 每一层转移来一次斜率优化 思路 先便便式子 \[s^2=m^{2}*\frac{\sum_{1}^{m}(a_{i}-\overline{a})^2}{m}\] \[=m*\sum_{1}^{m}(a_{i}-\overline{a})^2\] \[=m*\sum_{1}^{m}(a_{i}^2-2*a_{i}*\overline{a}+\ov