P7962 [NOIP2021] 方差 (DP)
题目的意思就是可以交换差分数组,对答案进行化简:n∑ai2−(∑ai)2 ,再通过手玩分析可得最优解的差分数组一定是单谷(可以感性理解一下),因此我们将差分数组排序,依次加入,每次可以选择加在左边或者右边,转移方程就可以写出来了。
为了将空间优化,可以用滚动数组。
1 #include <bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 const int N = 1e4 + 10, M = 6e6 + 10, inf = 1e18;
5 int n, a[N], b[N], sum[N], f[2][M], cnt, ans = inf;
6
7 signed main () {
8 scanf("%d", &n);
9 for (int i = 1; i <= n; i++) cin >> a[i];
10 for (int i = 1; i < n; i++) b[i] = a[i + 1] - a[i];//差分数组
11 sort(b + 1, b + n);
12 for (int i = 1; i < n; i++) if (b[i] == 0) cnt++;//为0的不用管
13 for (int i = 1; i < n; i++) sum[i] = sum[i - 1] + b[i];
14 int maxn = a[n];
15 for (int i = 1; i <= maxn * n; i++) f[cnt & 1][i] = inf;
16 for (int i = cnt + 1; i < n; i++) {
17 for (int j = 0; j <= maxn * n; j++) f[i & 1][j] = inf;
18 for (int j = 0; j <= maxn * n; j++) {
19 if (f[(i & 1) ^ 1][j] == inf) continue;
20 //刷表法
21 f[i & 1][j + sum[i]] = min(f[i & 1][j + sum[i]], f[(i & 1) ^ 1][j] + sum[i] * sum[i]);//放右边
22 f[i & 1][j + b[i] * i] = min(f[i & 1][j + b[i] * i],f[(i & 1) ^ 1][j] + 2 * j * b[i] + b[i] * b[i] * i);//放左边
23 }
24 }
25 for (int i = 0; i <= maxn * n; i++)//统计答案
26 if(f[(n & 1) ^ 1][i] != inf) ans = min(ans, n * f[(n & 1) ^ 1][i] - i * i);
27 cout << ans <<endl;
28 return 0;
29 }
P7962 [NOIP2021] 方差 (DP)的更多相关文章
- HDU5492 Find a path[DP 方差]
		Find a path Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ... 
- NOI1999 JZYZOJ1289 棋盘分割 dp 方差的数学结论
		http://172.20.6.3/Problem_Show.asp?id=1289 除了下标一坨一坨屎一样挺恶心其他都还挺容易的dp,这道题才发现scanf保留小数位是四舍五入的,惊了. f[k][ ... 
- HDU - 5492 Find a path(方差公式+dp)
		Find a path Frog fell into a maze. This maze is a rectangle containing NN rows and MM columns. Each ... 
- P7961 [NOIP2021] 数列 (DP 刷表法)
		(n<=30,是个多维的DP) v数组就是用来计算权值的,一共有m+1个.将S看做一个二进制数,按照题目S的定义,相当于在S的每一位可以随便+1(满足限制情况下),一共可以加n次. 我们来建立D ... 
- bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)
		题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ... 
- 【BZOJ-4518】征途      DP + 斜率优化
		4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 230 Solved: 156[Submit][Status][ ... 
- bzoj4518: [Sdoi2016]征途--斜率DP
		题目大意:把一个数列分成m段,计算每段的和sum,求所有的sum的方差,使其最小. 由方差*m可以化简得ans=m*sigma(ki^2)-sum[n]^2 很容易得出f[i][j]=min{f[i- ... 
- POJ1191 棋盘分割(DP)
		化简一下那个方差得到:$$\sqrt\frac{(\Sigma_{i=1}^nx_i)-n\bar x^2}{n}$$ 除了$\Sigma_{i=1}^nx_i$这部分未知,其余已知,而那部分显然越大 ... 
- HDU 5492(DP)  Find a path
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5492 题目大意是有一个矩阵,从左上角走到右下角,每次能向右或者向下,把经过的数字记下来,找出一条路径是 ... 
随机推荐
- 从零开始在centos搭建博客(一)
			本篇为安装篇. 基于centos 7.9,大部分东西使用docker安装. 软件列表:docker + mysql + wordpress 安装docker yum install -y yum-ut ... 
- 出现 Expected 0 arguments but found 1 的bug原因
			问题:在给FileInputStream传入参数时报错 原以为是导错了包,结果试了几次都不行,最后才发现是项目名和这个方法名重复了,修改项目名就可以了! 红线出只是异常,抛出即可解决 
- CentOS删除桌面环境
			公司有几台虚拟机安装的是CentOS7的桌面环境,平时也是用终端访问,于是在服务器卡住需要重启时,顺便就把桌面环境给卸载了:测试了好多方法均不成功,最终找到了可行的方式,以此记录: [root@yun ... 
- openstack 虚拟机网卡被重名为cirename0
			虚拟机网卡被重名为cirename0 在虚拟机挂载多网卡情况下,你在虚拟机上卸载网卡后,再创建新的port挂给虚拟机使用,如果虚拟机不经过重启的话,是不会有任何问题的.但是,如果虚拟机重启了,你 ... 
- 如何记录分析你的炼丹流程—可视化神器Wandb使用笔记【1】
			本节主要记录使用wandb记录训练曲线以及上传一些格式的数据将其展示在wandb中以便分析的方法,略过注册安装部分(可使用pip intall wandb安装,注册相关issue可上网搜索),文章着重 ... 
- JavaScript 权威指南-学习笔记(一)
			本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ... 
- jQuery基础入门(一)
			jQuery是什么? jQuery是一个JavaScript常用的工具函数库.jQuery是一个轻量级的"写的少,做的多"的JavaScript库. jQuery当中包含有以下一些 ... 
- BZOJ1787/Luogu4281: [Ahoi2008]Meet 紧急集合
			画画图可知,三点\(lca\)必有两相同,\(a,b,c\)距离为\(dis_a + dis_b + dis_c - dis_{lca(a,b)} - dis_{lca(b,c)} - dis_{lc ... 
- Vue3中defineEmits、defineProps 是怎么做到不用引入就能直接用的
			最近正在将一个使用单文件组件的 Options API 的 Vue2 JavaScript 项目升级为 Vue3 typescript,并利用 Composition API 的优势. 比如,下面这种 ... 
- 你必须学UML之理论篇
			1.前言 对于当前社会背景下从事软件开发的工作者而言,"写代码"实际上并不是唯一的工作.特别在一些中小型的企业当中,这些企业往往对于开发者的要求,不单单停留在写代码完成相应功能上, ... 
