题目链接: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. mybatis 单一参数时的动态语句

    public void getBookList(String publisher,String author){ Map<String,Object> maps = new HashMap ...

  2. centos关机与重启命令详解

    Linux centos关机与重启命令详解与实战 Linux centos重启命令: 1.reboot   普通重启 2.shutdown -r now 立刻重启(root用户使用) 3.shutdo ...

  3. 【Mac + Pycharm】之实用东西以及配置东西

    一.新建.py文件时默认模板: 步骤:File => Preferences for New Projects => Editor => File and Code Template ...

  4. appium mac 下 安装及踩坑

    Appium Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriver的json ...

  5. Maven学习----dependencies与dependencyManagement的区别(转)

    转自:http://blog.csdn.net/liutengteng130/article/details/46991829 1.DepencyManagement应用场景 当我们的项目模块很多的时 ...

  6. CSS3 - 鼠标移入移出时改变样式

    1,使用伪类实现样式切换伪类是CSS2.1时出现的新特性,让许多原本需要JavaScript才能做出来的效果使用CSS就能实现.比如实现下面的鼠标悬停效果,只要为:hover伪类应用一组新样式即可.当 ...

  7. 仿百度壁纸client(五)——实现搜索动画GestureDetector手势识别,动态更新搜索keyword

    仿百度壁纸client(五)--实现搜索动画GestureDetector手势识别,动态更新搜索关键字 百度壁纸系列 仿百度壁纸client(一)--主框架搭建,自己定义Tab + ViewPager ...

  8. Servlet学习笔记【1】--- 背景和基础知识(CGI、Web服务器发展史、Servlet简介、任务、继承结构)

    本文主要讲Servlet的基础知识和背景知识. 1 CGI简介 CGI(Common Gateway Interface 公共网关接口)是WWW技术中最重要的技术之一,有着不可替代的重要地位.CGI是 ...

  9. 洛谷2704 [NOI2001]炮兵阵地

    题目戳这里 Solution 状压DP很好的入门题,用熟练位运算貌似也没那么难. 首先分析一下题目: 看见n=100,m=10,立马就想到了状压,看起来也像DP,所以我们还是采用行号为阶段的状压DP. ...

  10. apche安装教程

    从Apache官网下载windows安装版的Apache服务器了, 现在分享给大家.   1 进入apache服务器官网http://httpd.apache.org/,这里我们以下载稳定版的 htt ...