tyvj1191 迎春舞会之三人组舞
背景
描述
站的队形——较矮的2个人站两侧,最高的站中间。
从对称学角度来欣赏,左右两个人的身高越接近,则这一组的“残疾程度”越低。
计算公式为 h=(a-b)^2 (a、b为较矮的2人的身高)
那么问题来了。
现在候选人有n个人,要从他们当中选出3*m个人排舞蹈,要求总体的“残疾程度”最低。
输入格式
第二排n个数字,保证升序排列。
输出格式
测试样例1
输入
9 40
1 8 10 16 19 22 27 33 36 40 47 52 56 61 63 71 72 75 81 81 84 88 96 98 103 110 113 118 124 128 129 134 134 139 148 157 157 160 162 164
输出
23
备注
数据保证3*m<=n
对于这道题,首先应该想到贪心:每次取差值最小的一对。但是这样的贪心策略很容易找到反例,而且N=5000的数据规模,十分有可能是O(n^2)的算法。
于是考虑动态规划。如果是DP,那么很容易想到如下的状态定义:d[i][j]表示用前j个数组成i个(x,y,z)数对的最小消耗。
另外一个很容易注意到的地方就是:对于一个最优决策中的任意一个数对(x,y,z),其中x和y必在有序的a[i]中相邻。关于这点用反证法不难证明,也很容易注意到。
对于(x,y,z)中的z应该如何决策的问题,之前一直令我迷惑,这一点应该是题目最难解决的问题。
考虑状态d[i][j]:
对于x和y,有如下考虑:
对于a[j],如果不使用a[j],那么d[i][j]=d[i][j-1];
如果使用a[j],那么就和a[j-1]一起使用,d[i][j]=d[i-1][j-2]+w(a[i],a[i-1]);
于是有了总的状态转移方程:d[i][j]=min{d[i][j-1],d[i-1][j-2]+w(a[i],a[i-1])};
这应该不难理解,但是对于z的决策呢?
如果把a[i]按降序排列,那么z的影响就可以忽略了!这样依然可以采用上面的方程。
考虑状态d[i][j]:
如果j<3i,此时当前策略是不可行的,d[i][j]=INF;
如果j>=3i,即j>=3(i-1)+3,j>3(i-1)+2,当前状态有效
转移到d[i-1][j-2]时,至少剩余一个多余的a[k]
由于序列降序,a[k]可以和a[j]、a[j-1]配对
同时d[i-1][j-2]有效,可以继续递归。
转移到d[i][j-1]
若d[i][j-1]为无效状态,d[i][j-1]==INF,必然不会比上面那种转移方式优;
若d[i][j-1]为有效状态,可以继续递归地进行下去。
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
int m,n,a[];
long long dp[][];
int main(){
cin>>m>>n;
for(int i = n;i >= ;i--){
scanf("%d",&a[i]);
}
for(int i = ;i <= m;i++){
for(int j = ;j <= n;j++){
if(j < i * ) dp[i][j] = 9876543212345L;
else dp[i][j] = min(dp[i][j-],dp[i-][j-] + (a[j] - a[j-]) * (a[j] - a[j-]));
}
}
cout<<dp[m][n];
return ;
}
tyvj1191 迎春舞会之三人组舞的更多相关文章
- Vijos 1061 迎春舞会之三人组舞(DP)
题目链接 经典DP问题,通过问题,看出结论,然后倒序,然后注意条件. #include <cstdio> #include <cstring> #include <ios ...
- Vijos P1061 迎春舞会之三人组舞 DP
题目链接:https://vijos.org/p/1061 n个人选出3*m人,排成m组,每组3人. 站的队形——较矮的2个人站两侧,最高的站中间. 从对称学角度来欣赏,左右两个人的身高越接近,则这一 ...
- VJ1061迎春舞会之三人组舞
题目链接 推了半个下午..写的三重超时了 加了点单调队列的思想 优化了下过了 dp[i][j] 第二组的最右边的人选第J个人 那最左边肯定选第j-1个人 肯定是选相邻的 dp[i][j] = min ...
- 【洛谷P1538】迎春舞会之数字舞蹈
迎春舞会之数字舞蹈 题目链接 一道奇怪的模拟题, 先将样例输出复制下来,观察观察 -- -- -- -- -- -- -- -- ① | | | | | | | | | | | | | | ② | | ...
- VIJOS-P1064 迎春舞会之数字舞蹈
洛谷 P1538 迎春舞会之数字舞蹈 洛谷传送门 JDOJ 1245: VIJOS-P1064 迎春舞会之数字舞蹈 JDOJ传送门 Description 在越来越讲究合作的时代,人们注意的更多的 ...
- tyvj1192 迎春舞会之集体舞
背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 描述 表演者排成n排,构成一个向前的正三角形(在屏幕上,即向下).而就每个人,他有可能正面朝前(小的向前正三角形).或向后三角形(小的向后正 ...
- 洛谷P1538迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
- 洛谷 P1538 迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
- P1538 迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
随机推荐
- 用修改hosts的方式来屏蔽某些网站
首先呢,来自知乎的一些问答:修改 hosts 文件可以上一些墙内屏蔽的网站,其原理是什么? (然而通过增/改hosts的方法来FQ已经失效很久了) 然后呢,也可以通过修改hosts来达到屏蔽某些网站的 ...
- 转《WF编程》笔记目录
<WF编程>笔记目录 2008-03-18 09:33 by Windie Chai, 26803 阅读, 49 评论, 收藏, 编辑 WF笔记开始 <WF编程>系列之0 - ...
- POJ3368Frequent values[RMQ 游程编码]
Frequent values Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17581 Accepted: 6346 ...
- AC日记——苹果树 codevs 1228
1228 苹果树 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 在卡卡的房子外面,有一棵 ...
- WINDOW的cmd的命令【转载】
转载地址:https://zhidao.baidu.com/question/583956458.htmlwinver---------检查windows版本 wmimgmt.msc----打开win ...
- typescript实现react中的批次式更新
欢迎吐槽讨论 前言 笔者在React经常使用setState,在学习过程中作笔记以作总结,欢迎讨论. 关于setState的核心观点 1 . 执行setState不都是异步的. 2 . setStat ...
- js动态创建style节点(js文件中添加css)
ie6 不能 document.createElement('style') 然后append到head标签里.所以就找到这样个好文章 --------------------- 有很多提供动态创建 ...
- 【三石jQuery视频教程】01.图片循环展示_再次重发
之前的文章,由于在博文的底部放有微信公众号的缘故,被管理员判定为: 您好,您的这篇博文内容本身没什么问题,但是,在博文底部存在推广信息内容.... 你们也没告知到底是哪条触犯了博客园的规矩,我就把底部 ...
- C#接口和抽象类的区别
大家都容易把这两者搞混,我也一样,在听李建忠老师的设计模式时,他也老把抽象类说成接口,弄的我就更糊涂了,所以找了些网上的资料. 一.抽象类: 抽象类是特殊的类,只是不能被实例化:除 ...
- 由Memcached升级到 Couchbase的 Java 客户端的过程记录(三)
采用之前的源码运行后,我们发现 只有一个配置信息 即servers=127.0.0.1:11211,即 Couchbase Server的服务所在ip 和端口,此时数据直接存在 default 中 根 ...