[CSP-S模拟测试]:军训队列(DP+乱搞)

题目描述

有$n$名学生参加军训,军训的一大重要内容就是走队列,而一个队列的不规整程度是该队中最高的学生的身高与最矮的学生的身高差值的平方。
现在要将$n$名参加军训的学生重新分成$k$个队列,每个队列的人数不限,请求出所有队列的不规整程度之和的最小值。


输入格式

第一行两个整数$n,k$,表示学生人数和队列数。
第二行$n$个实数,表示每名学生的身高。身高范围在$140\sim 200cm$之间,保留两位小数。


输出格式

一个实数表示答案,保留$2$位小数。


样例

样例输入1:

3 2
170.00 180.00 168.00

样例输出1:

4.00

样例输入2:

5 2
170.00 180.00 168.00 140.59 199.99

样例输出2:

1023.36


数据范围与提示


题解

$50$分的$DP$应该都会打,问题就在于如何优化。

的确可以斜率优化,但是考虑身高的范围,也就是说最多有$6000$种不同的身高。

那么离散化一下不就$AC$啦?

再考虑另一种并不正确的算法,尽可能让平方差最大的一组最小;的确是错的,第二个样例都过不了,但是在数据范围比较大的时候很难被卡;再结合前面暴力$DP$即可拿到满分……

时间复杂度:$\Theta(6000\times 6000)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n,k;
double h[100001];
double dp[100001][21];
double ans=1000000000.0;
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)scanf("%lf",&h[i]);
	sort(h+1,h+n+1);
	n=unique(h+1,h+n+1)-h-1;
	for(int i=1;i<=n;i++)dp[i][1]=(h[i]-h[1])*(h[i]-h[1]);
	for(int j=2;j<=k;j++)
		for(int i=1;i<=n;i++)
		{
			dp[i][j]=10000000000.0;
			for(int l=i;l>=j;l--)
				dp[i][j]=min(dp[i][j],dp[l-1][j-1]+(h[i]-h[l])*(h[i]-h[l]));
		}
	printf("%.2lf",dp[n][min(n,k)]);
	return 0;
}


rp++

原文地址:https://www.cnblogs.com/wzc521/p/11746874.html

时间: 2024-08-29 21:43:42

[CSP-S模拟测试]:军训队列(DP+乱搞)的相关文章

【NOIP模拟赛】与非 乱搞

biubiu~~~ 正解是线段树维护真值表,但是我觉得对于这道题来说乱搞就够了....... 我们发现如果我们把每一个数都一开始取反就会发现对于最后结果来说 x=x^1,x nand x=x|x ,x nand x nand x=x|x^1|x,x nand x nand x nand x=x|x^1|x^1|x.....而且我们还发现|0是无效,而且|1之后如有操作择从0开始若无操作则为1,那么我们可以维护我们处理过的x在序列上的前缀和以及他们从一开始进行操作然后每一位都停止一次的前缀答案和,

[CSP-S模拟测试]:蛇(DP+构造+哈希)

题目传送门(内部题140) 输入格式 前两行有两个长度相同的字符串,描述林先森花园上的字母. 第三行一个字符串$S$. 输出格式 输出一行一个整数,表示有多少种可能的蛇,对$10^9+7$取模. 样例 样例输入1: rwbyybwrrwby 样例输出1: 4 样例输入2: oooooooo 样例输出2: 14 数据范围与提示 对于$20\%$的数据,$n,|S|\leqslant 16$. 对于$40\%$的数据,$n,|S|\leqslant 40$. 对于$60\%$的数据,$n,|S|\l

[CSP-S模拟测试]:折射(DP)

题目描述 小$Y$十分喜爱光学相关的问题,一天他正在研究折射. 他在平面上放置了$n$个折射装置,希望利用这些装置画出美丽的折线. 折线将从某个装置出发,并且在经过一处装置时可以转向,若经过的装置坐标依次为$(x_1,y_1),(x_2,y_2),...(x_k,y_k)$,则必须满足: $\bullet \forall j\in (1,k],y_j<y_{j−1}$ $\bullet \forall j\in (2,k],x_{j−2}<x_j<x_{j−1}or\ x_{j−1}&l

[CSP-S模拟测试]:tree(DP)

题目传送门(内部题57) 输入格式 第一行包含一个数:$n$表示树的节点数.接下来$n-1$行,每行包含两个数:$u,v$表示无根树的一条边. 输出格式 输出$n$行,第$i$行包含一个浮点数,保留三位小数,表示第$i$号点第一次访问的期望时间. 样例 样例输入: 31 22 3 样例输出: 1.0002.0005.000 数据范围与提示 样例解释: 样例解释:容易分析出,所有可能情况下,到达$1$号点和$2$号点的时间都分别是:$1$和$2$,我们考虑$3$号点的到达时间,所有可能的过程:$1

[CSP-S模拟测试]:题(DP)

题目描述 由于出题人赶时间所以没办法编故事来作为背景.一开始有$n$个苹果,$m$个人依次来吃苹果,第$i$个人会尝试吃$u_i$或$v_i$号苹果,具体来说分三种情况.$\bullet 1.$两个苹果都还在,那么这个人将随便选一个苹果吃了.$\bullet 2.$只有一个苹果,那么这个人将吃掉这个苹果.$\bullet 3.$都不在了,这个人吃不到苹果就走了.请问有多少对苹果$(i,j)(i<j)$满足它们两个都幸存下来的概率$>0$. 输入格式 第一行两个数$n,m$.接下来$m$行,每行

[CSP-S模拟测试]:花(DP)

题目传送门(内部题111) 输入格式 一个整数$T$,表示测试数据组数. 每组测试数据占一行,两个整数,分别表示$L$和$S$. 输出格式 对每组数据,输出一个整数表示答案. 样例 样例输入1: 13 7 样例输出1: 7 样例输入2: 24 210 11 样例输出2: 4410199993 数据范围与提示 样例$1$解释: 一共有$7$种形态,每种形态能构成$1$个方案. 样例$2$解释: AAAB ABBB BAAA BBBA 数据范围: 对于$60\%$的数据,$L\leqslant 30

HZOJ 20190727 T2 单(树上dp+乱搞?+乱推式子?+dfs?)

考试T2,考试时想到了40pts解法,即对于求b数组,随便瞎搞一下就oxxk,求a的话,很明显的高斯消元,但考试时不会打+没开double挂成10pts(我真sb),感觉考试策略还是不够成熟,而且感觉考试时间很不够用,一直在瞎yy+code,听讲题DeepinC 12min就打出了T150pts,这不仅是思维上的劣势,而且打代码的速度必须要加上来啊,不然就算有好想法也打不出来(也没啥好想法). 接下来就是正经八本的题解了: 首先我们可以来一波玄学复杂度分析,数据范围1e5,要么$O(nlogn)

2018-10-25 模拟测试题解

目录 问题 A: 魏传之长坂逆袭 题目描述 输入 输出 样例输入 样例输出 题解 问题 B: 蜀传之单刀赴会 题目描述 [问题描述] 输入 输出 样例输入 样例输出 题解 问题 C: 吴传之火烧连营 [题目背景] [问题描述] 输入 输出 样例输入 样例输出 [样例解释] [数据规模和约定] 题解 本篇题解也发表于zwcblog作者是同一个人 问题 A: 魏传之长坂逆袭 题目描述 众所周知,刘备在长坂坡上与他的一众将领各种开挂,硬生生从曹操手中逃了出去,随后与孙权一起火烧赤壁.占有荆益.成就霸业

[考试反思]1026csp-s模拟测试88:发展

不用你们说,我自己来:我颓闪存我没脸. 昨天的想法, 今天的回答. 生存, 发展. 总分榜应该稍有回升,但是和上面的差距肯定还是很大. 继续. 为昨天的谬误,承担代价. T2和T3都值得张记性. T2因为上次输出了"-0.00"在文本比较下与"0.0"不同导致WA,所以这次输出的时候把答案加了0.005 但是加的太多了,在四舍五入下恰好进位了导致WA. 为了防止输出"-0.0"要将答案加一个1e-9级别的数,不要太小也不要太大. T3算错上限没打