U40620 还没想好名字的题

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;
    }

原文地址:https://www.cnblogs.com/Tony-Double-Sky/p/9807140.html

时间: 2024-08-01 10:15:35

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

U45490 还没想好名字的题Ⅱ

这一题的环状板 Solution 暴力断环为链, 枚举起点跑 \(n\) 遍 \(DP\), 取最小值即可 Code #include<iostream> #include<cstdio> #include<queue> #include<cstring> #include<algorithm> #include<climits> #include<cmath> #define LL long long #define R

还没想好标题~~

最近一直在看<30天制作操作系统>这本书,一边看一边跟着实践,看了快半个月了到现在才跟到第三天,由于自己本来底子很薄(或者说根本就没有),所以非常的吃力.    =================================    我不是什么程序员,工作也与IT没有任何关系,至于为什么这么做,恐怕就只剩下兴趣与好奇心了.    我初中的时候第一次接触电脑,是我叔叔不知从哪里捡来的一台很旧的电脑,但是谁也不会用,(到现在我也不知道为什么)开机之后就是黑乎乎的界面,只能打字,于是我用它学会了打

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

#include <iostream> #include <queue> #include <stdio.h> #include <string.h> #include <algorithm> #define inf 1000001 using namespace std; struct node { int x,y,c,w; int next; } eg[400001]; int n,m,K,s,t,tt,head[2005],dis[2005

我还没死!!微信公众号——自媒体的营销之路

过去的非常多天的一直没有写什么博客,我还没死. 实际上我在忙着几个项目的设计和制作,个人的站点.企业的站点另一些自媒体的编辑.创作,实在很抱歉大家对我的等待哈,当前我同一时候还在山东毛豆科技工作负责微企通.秀企来以及微商会的实现工作. 同一时候在企业里学了一些SEO和Corel系列软件的使用,提高了HTML和CSS的使用能力,顺便学了一些文案的知识--感觉良好. 现在,我想要提升一下个人的品牌的建立和提升,而一个博客是远远不能满足全部的要求.所以我把目光投向了微信--差点儿每个中国人都在使用的A

顺丰社区O2O一波三折,王卫还是没想清楚

对于顺丰做社区O2O,一直也没吐槽过什么,因为当初社区O2O概念受到认可,有很大一部分是顺丰的因素,顺丰对这个行业是有贡献的,况且市场创新总会有试错的过程.作为社区O2O最早的鼓吹者,自然对顺丰有那么点敬意,不过这并不影响其他人吐槽顺丰嘿客的乐趣. 在一片质疑声中,近日顺丰"嘿客"更名为"顺丰家",但改名也救不了顺丰社区O2O的尴尬处境.今天要讲的内容也不是要吐槽顺丰的社区O2O,更谈不上为"马云最敬佩的人"的人提什么建议,只是简单帮顺丰梳理下社

Java程序员面试体会,还没找到工作的“猿猿们”看过来!

类似的话题,我大约在几个月前跟大家聊过.这一次,我要根据这段时间的体会,再给大家整理一下. 今天,很轻松地拿到了神州数码的offer.虽然工资不是特别高,虽然很多人一毕业就能进入这样的公司,但是对我这个半路出家的大专生来说,能进去纯属意外. 今天的面试,谈到了以前我接过一些私单,项目经理问我,那你现在还有没有做私活的想法?我说,彻底没有!他问我,为什么?我说,这几年,虽然做私活挣了一些钱,但我损失的远远不止那点钱.那些重复.繁琐,很难有技术水平提升的工作,占用了我大部份的业余时间,如果这些时间用

三星坠落:最糟的日子还没到来

现如今的大众,都充满了"邪恶"的恶趣味.不再关心某个名人.明星,或某家企业是如何从无到有,一举成名,一夜暴富的,更关心的是他们如何从天堂坠入深渊.这样他们才能嘲笑一句:"早知如此,何必努力."如今,三星就面临着这样一个尴尬处境.在财大气粗了好几年后,不景气的财报凸显出它的无力,也让很多人在等着看它的笑话. 事实上,三星坠落并不是骤然而至,而是有着深刻根源.正所谓最强势的地方就是最薄弱的环节,三星最终还是败在了成就自己巅峰的移动业务上.如今的三星就像热锅上的蚂蚁,急的

你还没真的努力过,就轻易输给了懒惰

(Xee:越来越懒惰了,哎,最近的日子不是很好过!多读些书吧) 前不久一个孩子在微信上发了一大堆截图给我,仔细一看,都是介绍北大清华的牛人们的.这个得了奥赛冠军,那个门门年级第一.那孩子很颓丧得说:"我觉得我再怎么努力也比不上他们啊,突然对自己的未来好没有希望." 忽然想到了知乎上的一个经典回答:"以大多数人努力的程度,根本还没到拼智商的地步." 我的一个远房舅妈,一直是个亲戚中的著名人物. 由于时代的原因,她读到初中毕业就没有继续念书了.毕业后进入了工厂上班,经人

互联网还没+好 机器智能+的时代快要到了

此文是Summly前商业开发及运营经理John Henderson的文章,原文发表在Medium上.作者思考了机器智能赋予机器的思考能力,以及传感器技术赋予的感知能力(如看的能力)运用到诸多垂直领域的颠覆可能性,不少领域的工作在5年之内也许就可以由机器来替代了.       接下来1万家初创企业的商业计划很容易预测:做X然后再加上AI. -Kevin Kelly 原先阿兰·图灵认为到1950年计算机就会思考.1997年,超级计算机深蓝击败了国际象棋世界冠军卡斯帕罗夫.2011年,IBM的Wats