博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3095 : 二元组
阅读量:4670 次
发布时间:2019-06-09

本文共 1299 字,大约阅读时间需要 4 分钟。

 

\[\begin{eqnarray*}

&&\sum_{i=0}^{n-1}\left(ki+b-a_i\right)^2\\
&=&\sum_{i=0}^{n-1}\left(k^2i^2+b^2+a_i^2+2kbi-2kia_i-2ba_i\right)\\
&=&k^2\sum_{i=0}^{n-1}i^2+nb^2+\sum_{i=0}^{n-1}a_i^2+2kb\sum_{i=0}^{n-1}i-2k\sum_{i=0}^{n-1}ia_i-2b\sum_{i=0}^{n-1}a_i\\
\end{eqnarray*}\]

  设

\[\begin{eqnarray*}
A&=&\sum_{i=0}^{n-1}i^2\\
B&=&\sum_{i=0}^{n-1}i\\
C&=&\sum_{i=0}^{n-1}ia_i\\
D&=&\sum_{i=0}^{n-1}a_i\\
\end{eqnarray*}\]
  则只需最小化
\[\begin{eqnarray*}
&&Ak^2+nb^2+2kBb-2kC-2Db\\
&=&nb^2+(2kB-2D)b+Ak^2-2kC\\
\end{eqnarray*}\]
  这是个关于$b$的二次函数,显然当$b$取$\frac{D-kB}{n}$时取得最小值,将$b$用$k$表示,则
\[\begin{eqnarray*}
&&Ak^2+nb^2+2kBb-2kC-2Db\\
&=&Ak^2+\frac{\left(D-kB\right)^2}{n}+\frac{2kB\left(D-kB\right)}{n}-2kC-\frac{2D\left(D-kB\right)}{n}\\
&=&Ak^2+\frac{-D^2-B^2k^2+2BDk}{n}-2Ck\\
&=&\frac{nAk^2-2nCk-D^2-B^2k^2+2BDk}{n}\\
&=&\frac{\left(nA-B^2\right)k^2+\left(2BD-2nC\right)k-D^2}{n}\\
\end{eqnarray*}\]
  这也是个关于$k$的二次函数,显然当$k$取$\frac{nC-BD}{nA-B^2}$时取得最小值。直接计算即可,时间复杂度$O(n)$。

 

#include
int n,i,j;double A,B,C,D,k,b;inline void read(int&a){ char c;bool f=0;a=0; while(!((((c=getchar())>='0')&&(c<='9'))||(c=='-'))); if(c!='-')a=c-'0';else f=1; while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0'; if(f)a=-a;}int main(){ for(read(n);i

  

转载于:https://www.cnblogs.com/clrs97/p/4703437.html

你可能感兴趣的文章
五、椒盐排骨
查看>>
loj136 (最小瓶颈路,多次询问)
查看>>
4.1字符类型统计
查看>>
discuz核心函数库function_core的函数注释
查看>>
[Python] 用python做一个游戏辅助脚本,完整思路
查看>>
(转载)linux中shell变量
查看>>
对象数组操作
查看>>
盘点selenium phantomJS使用的坑
查看>>
Android Studio优秀插件汇总
查看>>
oracle下的数据库实例、表空间、用户及其表的区分
查看>>
Jmeter中的变量(三)
查看>>
Oracle数据库备份dmp文件,使用cmd命令导入导出步骤,以及忘记Oracle密码
查看>>
20180601 -1
查看>>
jetty;linux 目录结构
查看>>
Codeforces914D Bash and a Tough Math Puzzle
查看>>
测试,发布,质量保障,用户体验
查看>>
python格式化输出
查看>>
Leetcode 231. Power of Two
查看>>
MYSQL IFNULL函数的使用
查看>>
InvocationTargetException异常
查看>>