U40620 niiickの还没想好名字的题

给定一个长度为\(n\)的序列\(a_1,a_2...,a_n\)

要求将这\(n\)个数分为\(m\)组,每组可以有任意多个数,但同一组中的数必须是原序列中连续的一段

求如何分组能使得各组的标准差最小,

即求$$min(\sqrt{\sum_{i=1}m\frac{(x_i-\overline{x})2}{m}})$$其中\(x_i\)为第\(i\)组数的和,\(\overline{x}\)为各组数和的平均值

求这个最小值


纪念一下交了19遍(不是因为debug)


Solution

我们先考虑这个部分 \(\sum_{i = 1}^{m}(x_{i} - \overline{x}) ^ {2}\)

设 \(dp[i][j]\) 表示考虑前 \(i\) 个数, 分成 \(j\) 个部分的最小值

类似区间\(dp\), 我们暴力枚举断点计算多分一组, 即大区间的答案

状态转移方程见代码

Code

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
#include<cmath>
#define LL long long
#define REP(i, x, y) for(int i = (x);i <= (y);i++)
using namespace std;
int RD(){
int out = 0,flag = 1;char c = getchar();
while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const int maxn = 419;
int num, m;
double dp[maxn][maxn], sum[maxn], ave;
int main(){
num = RD(), m = RD();
REP(i, 1, num)sum[i] = sum[i - 1] + RD();
ave = sum[num] / (m * 1.0);
REP(i, 0, num)REP(j, 0, m)dp[i][j] = 1e19;
dp[0][0] = 0;
REP(i, 1, num){
REP(j, 1, min(i, m)){
REP(k, 0, i - 1){
dp[i][j] = min(dp[i][j],
dp[k][j - 1] + ((sum[i] - sum[k] - ave) * (sum[i] - sum[k] - ave)));
}
}
}
printf("%.2lf\n", sqrt(dp[num][m] / (double)m));
return 0;
}

U40620 还没想好名字的题的更多相关文章

  1. U45490 还没想好名字的题Ⅱ

    这一题的环状板 Solution 暴力断环为链, 枚举起点跑 \(n\) 遍 \(DP\), 取最小值即可 Code #include<iostream> #include<cstd ...

  2. noi2018还没想好记

    前面说点什么.. 没想到吧 嘴上说着不写的彩笔博主最后还是写了这篇东西.. Day -inf 在雅礼集训,打了四场模拟赛.. 真正说打得好的.. 也就那么一场 身体很差 心态很差 状态很差 虽然有书读 ...

  3. 自学C Primer Plus时还没想明白的问题

    2016年11月24日 1. 计算机中两个浮点数怎样进行加法运算.2. 为什么计算机在计算时存在损失精度的可能3. 无符号数和有符号数的运算是怎样的4. printf中使用格式控制符的截断问题,比如% ...

  4. HDU2426:Interesting Housing Problem(还没过,貌似入门题)

    #include <iostream> #include <queue> #include <stdio.h> #include <string.h> ...

  5. 11-基于dev的bug(还没想通)

    十六进制转八进制 http://lx.lanqiao.cn/problem.page?gpid=T51 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n ...

  6. gRPC趁现在还没大火,抢先了解一下

    前言 系统分布式已经成为程序员的家常,将大型单体划分为相对简单的小模块,分散系统能力,提升系统扩展性.功能模块复用性等:各功能模块之间肯定会有很多数据共享和交互的应用场景,那就避免不了各模块之间的通信 ...

  7. 字节一面:事务还没提交的时候,redolog 能不能被持久化到磁盘呢?

    又是被自己菜醒的一天,总结面经看到这题目听都没听过,打开百度就像吃饭一样自然 老规矩,背诵版在文末.点击阅读原文可以直达我收录整理的各大厂面试真题 首先,咱需要明白的是,啥是持久化? 听起来高大上,换 ...

  8. 在各方面还没准备好的时候,大家一定要慎用border-box样式!!!!

    这几天,我被一个js问题困扰到癫狂了! 事情是这样的,我之前写了个功能非常复杂的纯jquery代码的前端gridview控件,实现了大量的功能和效果,在一些项目里也用得很好. 最近有个项目,样式做了调 ...

  9. 成功熬了四年还没死?一个IT屌丝创业者的深刻反思

    三个IT屌丝创业的故事 从前有三个屌丝,聚在一起做网络.提供免费的网络服务,砸锅卖铁,通宵达旦,除了卖肾,啥都做了.3年后终于做到了五百万用户.对于年轻人来说,能把五百万人玩弄于鼓掌之间,已经是很牛逼 ...

随机推荐

  1. 20135234mqy-——信息安全系统设计基础第六周学习总结

    处理器体系结构 4.1 Y86指令集体系结构 4.1.1程序员可见状态 Y86程序中的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态. 4.1.2 Y86指令 4个指令:irmovl, ...

  2. 作业1.3——Android平台的开发环境的发展演变

    一开始的打算是在eclipse的基础上搭建Android平台,在ADT.SDK上兜兜转转,听过一些前车之鉴后,还是选择了Android studio.因为之前安装过eclipse,就省去了JDK下载和 ...

  3. Java第二天——标识符命名规则、Java的知识、快捷键的使用、Scanner获取值的常用方法

    1.标识符命名规则 字母.下划线.数字.美元符号($)由这四个部分组成. 标识符=首字母+其他 首字母:字母.下划线.美元符号($) 其他:字母.下划线.数字.美元符号($) 注意: 1.首字母不能为 ...

  4. ns3 模拟无线网络通信

    /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ /* * This program is fre ...

  5. java下Mysql基本操作

    https://www.cnblogs.com/centor/p/6142775.html

  6. [2017BUAA软工]第3次个人作业

    软工第3次个人作业--案例分析 一. 调研,评测 1.软件的bug(至少两个,不少于40字) 测试软件: 必应词典移动端 测试平台:iPhone 6 bug1 对于翻译功能中的图片翻译功能,必应词典是 ...

  7. Alpha阶段敏捷冲刺②

    1.提供当天站立式会议照片一张 每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 购买云服务器 注册账号 界面布局初步规划 今天计划完成的工作. 界面雏 ...

  8. 服务 在初始化安装时发生异常:System.IO.FileNotFoundException: 未能加载文件或******

    这个问题是在用installutil.exe安装服务时候碰到的 解决方法就是把installutil.exe文件直接复制到要安装的目录下 installutil.exe的所在位置 windows/mi ...

  9. GS7 使用IPV6的数据库的注册方法

    1. 首先保证 应用服务器和数据库服务器能够互相ping通 可以创建一个 bat 文件里面放上如下内容进行连接. start ping fe80::b0d4:::f3c5 -t start ping ...

  10. Fastqc使用说明

    用FastQC检查二代测序原始数据的质量 2013-01-28 21:28:10|  分类: Bioinformatics |  标签:bioinformatics  deep-seq   |举报 | ...