codeforces 572 D. Minimization(dp+ 思维)
题目链接:http://codeforces.com/contest/572/problem/D
题意:给出一个序列,可以任意调整序列的顺序,使得给出的式子的值最小

题解:显然要先排一下序,然后取相邻的显然是和最小的。要知道取完整条链之后的,值为
a[n]-a[1]-(没连在一起的a[k+1]-a[k]的值),一遍遍历下来肯定能得到2种长度的链。
len1=n/k+1,len2=n/k,count1=n%k,count2=k-count1,(count1表示长度为len1的链有几条
count2表示长度为len2的链有几条)。这样就有方向了,只要求那些没连在一起的a[k+1]-a[k]的最大值
即可。
设dp[i][j]表示有i条长度为len1的,j条长度为len2的链,没连在一起的a[k+1]-a[k]的最大值
显然转移方程为
pos = (i - 1) * len1 + j * len2;
dp[i][j] = max(dp[i][j] , dp[i - 1][j] + a[pos + 1] - a[pos])
pos = i * len1 + (j - 1) * len2;
dp[i][j] = max(dp[i][j] , dp[i][j - 1] + a[pos + 1] - a[pos]);
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int M = 3e5 + 10;
int a[M] , dp[5010][5010];
int main() {
int n , k;
scanf("%d%d" , &n , &k);
for(int i = 1 ; i <= n ; i++) {
scanf("%d" , &a[i]);
}
sort(a + 1 , a + n + 1);
a[0] = a[1] , a[n + 1] = a[n];
int len1 = n / k + 1 , len2 = n / k;
int count1 = n % k , count2 = k - count1;
memset(dp , 0 , sizeof(dp));
for(int i = 0 ; i <= count1 ; i++) {
for(int j = 0 ; j <= count2 ; j++) {
if(i) {
int pos = (i - 1) * len1 + j * len2;
dp[i][j] = max(dp[i][j] , dp[i - 1][j] + a[pos + 1] - a[pos]);
}
if(j) {
int pos = i * len1 + (j - 1) * len2;
dp[i][j] = max(dp[i][j] , dp[i][j - 1] + a[pos + 1] - a[pos]);
}
}
}
int ans = a[n] - a[1] - dp[count1][count2];
printf("%d\n" , ans);
return 0;
}
codeforces 572 D. Minimization(dp+ 思维)的更多相关文章
- [Codeforces 1201D]Treasure Hunting(DP)
[Codeforces 1201D]Treasure Hunting(DP) 题面 有一个n*m的方格,方格上有k个宝藏,一个人从(1,1)出发,可以向左或者向右走,但不能向下走.给出q个列,在这些列 ...
- Codeforces#572 Div2 C---Candies!【倍增】【DP】【思维】
题目:http://codeforces.com/contest/1189/problem/C 题意:给定n个数,每次查询一个区间$[l,r]$.对这个区间内的数,相邻两个数之和超过10,则得到一个c ...
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) Minimization dp
原题链接:http://codeforces.com/contest/572/problem/D 题意 给你个数组A和n,k,问你排列A后,下面的最小值是多少. 题解 先排个序,要填充像1,1+k,1 ...
- Codeforces 407B Long Path(好题 DP+思维)
题目链接:http://codeforces.com/problemset/problem/407/B 题目大意:一共n+1个房间,一个人从1走到n+1,每次经过房间都会留下一个标记,每个房间有两扇门 ...
- Codeforces Round #541 (Div. 2) G dp + 思维 + 单调栈 or 链表 (连锁反应)
https://codeforces.com/contest/1131/problem/G 题意 给你一排m个的骨牌(m<=1e7),每块之间相距1,每块高h[i],推倒代价c[i],假如\(a ...
- codeforces 233 D. Table(思维+dp )
题目链接:http://codeforces.com/contest/233/problem/D 题意:问在n*m的矩阵中满足在每一个n*n的矩阵里画k个点,一共有几种画法. 题解:其实这题挺简单的但 ...
- codeforces 1140D(区间dp/思维题)
D. Minimum Triangulation time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- Codeforces 914 C 数位DP+暴力打表+思维
题意 给出一个二进制数\(n\),每次操作可以将一个整数\(x\)简化为\(x\)的二进制表示中\(1\)的个数,如果一个数简化为\(1\)所需的最小次数为\(k\),将这个数叫做特殊的数, 问从\( ...
- 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 ...
随机推荐
- ES2019 / ES10有什么新功能?
ECMAScript(简称ES)是ECMA International在ECMA-262和ISO / IEC 16262中标准化的脚本语言规范.它是为了标准化JavaScript语言而创建的,以便从浏 ...
- javascript基础入门知识点整理
学习目标: - 掌握编程的基本思维 - 掌握编程的基本语法 typora-copy-images-to: media JavaScript基础 HTML和CSS 京东 课前娱乐 众人皆笑我疯癫,我笑尔 ...
- JDK1.8源码分析01之学习建议(可以延伸其他源码学习)
序言:目前有个计划就是准备看一下源码,来提升自己的技术实力.同时现在好多面试官都喜欢问源码,问你是否读过JDK源码等等? 针对如何阅读源码,也请教了我的老师.下面就先来看看老师的回答,也许会有帮助呢. ...
- 用html和css写一个头部header和左侧菜单栏menu-bar固定的的页面
这个页面header部分是100%的宽度,60px的高度,左侧是刚好一屏的高度,180的宽度,右侧的部分把剩余的空间占满,刚开始的时候还没怎么接触这样的页面,以为使用js读取浏览的可视化宽高,然后在做 ...
- 前端登录jq图形验证码
<!DOCTYPE html><html lang="zh"><head> <meta charset="UTF-8" ...
- [转载]ActiveMQ实现负载均衡+高可用部署方案
转载于 http://www.open-open.com/lib/view/open1400126457817.html 一.架构和技术介绍 1.简介 ActiveMQ 是Apache出品,最流行的, ...
- Java——数据结构(链表)
链表,可扩展长度,泛型. public class Link { Node header = null; //头结点 int length;//当前链表长度 class Node { Node nex ...
- exe4j打包--exe转安装包
前面一篇已经详细的说明了打包成exe的步骤了,下面谈谈exe如何压缩成安装文件.这里用到之前的另外一个软件,具体软件看这篇文章 exe4j打包成exe 打开inno 编辑器 打开软件后我们选择 用[脚 ...
- JQGrid之文件上传
文件/图片上传功能,简单总结如下 1.引入ajaxfileupload.js 注意:该文件需要在引入Jquery之后引入 下载链接:https://i.cnblogs.com/Files.aspx 2 ...
- 解决 Nginx 代理Apex慢的问题
前不久用 Nginx 代理 Oracle 的 Apex 速度非常慢,我之前Nginx 配置如下: server{ listen 80; server_name localhost; client_ma ...