题目链接:http://codeforces.com/problemset/problem/571/B

题意:

  给你一个长度为n的数列a[i]。

  现在你可以随意改变数字的位置,问你 ∑| a[i] - a[i+k] | 的最小值(1 <= i <= n-k)。

题解:

  将a[i]拆成若干个子序列s[j],子序列中相邻两数在a[i]中的距离为k。

  此时原式 = ∑(子序列s[j]内部之差的和)

  显然,要想使子序列s[j]内部之差的和尽可能小,子序列s[j]内部一定为升序。

  显然,要想使 ∑(子序列s[j]内部之差的和)尽可能小,所有子序列s[j]一定是由a[i]升序排序后分割而来。

  可以发现,拆出的子序列中:

    有 n2 = n%k 个子序列长度为 l1 = n/k+1

    有 n1 = k-n%k 个子序列长度为 l2 = n/k

  此时:

    原式 = ∑ (s[2]-s[1]+s[3]-s[2]+s[4]-s[3]...)

  前后相消之后就是:

    原式 = ∑ (s[i][end] - s[i][1])

  此时题目就变成了:

    先将a[i]排序,然后将a[i]分割成n1个长为l1的子串,以及n2个长为l2的子串。

    让你使得 ∑ (s[i][end] - s[i][1])最小。

  表示状态:

    dp[i][j]

    表示从头开始分割,已经分割出了i个长为l1的子串,以及j个长为l2的子串。

  找出答案:

    ans = dp[n1][n2]

  如何转移:

    if(i) dp[i][j] = min(dp[i][j], dp[i-1][j]+a[start1]-a[end1])

    if(j) dp[i][j] = min(dp[i][j], dp[i][j-1]+a[start2]-a[end2])

    start1/2, end1/2分别是新分割出的子串的首位与末尾。

  边界条件:

    dp[0][0] = 0

    others = INF

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX_N 300005
#define MAX_S 5005 using namespace std; int n,k;
int a[MAX_N];
long long dp[MAX_S][MAX_S]; int main()
{
cin>>n>>k;
for(int i=;i<=n;i++) cin>>a[i];
sort(a+,a+n+);
int n1=n%k,n2=k-n%k;
int l1=n/k+,l2=n/k;
memset(dp,0x3f,sizeof(dp));
dp[][]=;
for(int i=;i<=n1;i++)
{
for(int j=;j<=n2;j++)
{
if(i) dp[i][j]=min(dp[i][j],dp[i-][j]+a[i*l1+j*l2]-a[(i-)*l1+j*l2+]);
if(j) dp[i][j]=min(dp[i][j],dp[i][j-]+a[i*l1+j*l2]-a[i*l1+(j-)*l2+]);
}
}
cout<<dp[n1][n2]<<endl;
}

Codeforces 571B Minimization:dp + 贪心【前后相消】的更多相关文章

  1. Codeforces 571B Minimization

    http://codeforces.com/problemset/problem/571/B 给出一个序列,可以任意调整序列的顺序,使得给出的式子的值最小 思路:我们可以把序列分解,变成k条链,n%k ...

  2. CodeForces 572D Minimization(DP)

    题意翻译 给定数组AAA 和值kkk ,你可以重排AAA 中的元素,使得∑i=1n−k∣Ai−Ai+k∣\displaystyle\sum_{i=1}^{n-k} |A_i-A_{i+k}|i=1∑n ...

  3. codeforces 704B - Ant Man 贪心

    codeforces 704B - Ant Man 贪心 题意:n个点,每个点有5个值,每次从一个点跳到另一个点,向左跳:abs(b.x-a.x)+a.ll+b.rr 向右跳:abs(b.x-a.x) ...

  4. 【bzoj4027】[HEOI2015]兔子与樱花 树形dp+贪心

    题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...

  5. CodeForces - 50A Domino piling (贪心+递归)

    CodeForces - 50A Domino piling (贪心+递归) 题意分析 奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0. 代码 #include ...

  6. BZOJ 2021 [Usaco2010 Jan]Cheese Towers:dp + 贪心

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2021 题意: John要建一个奶酪塔,高度最大为m. 他有n种奶酪.第i种高度为h[i]( ...

  7. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  8. Codeforces Round #317 (Div. 2) D Minimization (贪心+dp)

    D. Minimization time limit per test  2 seconds memory limit per test  256 megabytes input  standard ...

  9. 线段树+dp+贪心 Codeforces Round #353 (Div. 2) E

    http://codeforces.com/contest/675/problem/E 题目大意:有n个车站,每个车站只能买一张票,这张票能从i+1到a[i].定义p[i][j]为从i到j所需要买的最 ...

随机推荐

  1. Word 操作

    1.出文件,最后一页是附件.最后一页的页码不想要.如何删除?用的是 office word 2010版本,跟07 03版本界面不一样. 在最后一页的最前面插入分节符:下一页 ,编辑页脚.让页脚“取消链 ...

  2. ACdream 1216 (ASC训练1) Beautiful People(DP)

    题目地址:http://acdream.info/problem? pid=1216 这题一開始用的是线段树.后来发现查询的时候还须要DP处理.挺麻烦..也就不了了之了..后来想到,这题事实上就是一个 ...

  3. Weka关联规则分析

    购物篮分析: Apriori算法: 参数设置: 1.car 如果设为真,则会挖掘类关联规则而不是全局关联规则. 2. classindex 类属性索引.如果设置为-1,最后的属性被当做类属性. 3. ...

  4. 微软2016校园招聘在线笔试第二场 题目1 : Lucky Substrings

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 A string s is LUCKY if and only if the number of different ch ...

  5. erlang的斐波那契数列

    [递归和循环] 题目: 大家都知道斐波那契数列,现在要求输入一个整数N,请输出斐波那契数列的第N项,以及前N项. 如:N <=39 下面是斐波那契数列的实现: -module(feibo). - ...

  6. 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS ---js里面直接调用方法

    OS js oc相互调用(JavaScriptCore)   接着上节我们讲到的iOS调用js 下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用 ...

  7. 更改eclipse(myeclipse) author的默认名字(注释的作者)

    在eclipse/myeclipse中,当添加注释的作者选项时,@author 后边一般都会默认填充的你登录计算机的用户名.如何去修改呢:第一种方法:修改计算机登录的用户名(一般不实用)第二种方法:修 ...

  8. Entity Framework 4.1:复杂类型

    这篇文章将讨论复杂类型. 默认情况下,EF4.1 将类映射到表,这是约定,但是有时候,我们需要模型比表的粒度更细一些. 地址是一个典型的例子,看一下下面的客户类. )] publicstring St ...

  9. Cloneable 和clone的区别和联系

    设计模式----原型模式时候,涉及到的复制克隆, Cloneable 接口,内部是没有任何方法的, 这个接口其实是一个标记性的接口,和Serializable是一样的,都是标记使用, 在类实现了这个C ...

  10. eclipse 修改 JDK中的src.zip的路径

    http://blog.sina.com.cn/s/blog_54a1bca7010112fb.html http://www.douban.com/note/211369821/ 1.点 “wind ...