UVALive - 6434 —(思维题)
题意:给出了你由n个数组成的序列,让你将这个序列分为成m个集合,使得每一个集合的最大值减最小值的差相加最小。(如果某集合只有一个数字,则最大值减最小值为0) 。
思路:首先我们不难想到,最优的分配方法一定是先给这n个数排序,然后将排序好的数分成m段。因为和一个数相差最小的数,就是在有序序列中与它相邻的数。
然后,要使得每段中最大值减最小值尽量小,那就应该尽量在相差较大的数字之间分段,这样就相当于抛弃了这一段差值。
比如,1,2,4,5,9,10。这六个数两两之间的差值分别为1,2,1,4,1.所以,如果要分成两段,应该在哪里分,当然是5和9之间,因为在所有的差值中,5和9是相差最多的,若在此处分段,表示你舍弃了大小为4的一段差值,而我们原本的目的就是舍弃尽量多的差值,使得最终的差值尽量小。如果要分成三段,那就是在2和4之间分,5和9之间分。
所以这题的解法就出来了:提前算出所有数之间的差值。然后在差值最大的几个数之间分段。
这题算最终结果还有个简便方法。就拿上面的例子来说。如果不分段,那最大值减最小值是9;如果分成两段,那就是在5和9之间分,两段的差值之和 = (5-1)+(10-9)=(10-1)-(9-5)=5。也就是说,最终结果会等于一开始的差值减去你舍去的差值。
具体看代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#define eps 1e-7
#define ll long long
#define inf 0x3f3f3f3f
#define pi 3.141592653589793238462643383279
using namespace std; int cmp(int a,int b)
{
return a>b;
} int main()
{
int t,n,m,cnt,a,b,res[],num[];
cin>>t;
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=; i<n; ++i)
scanf("%d",&num[i]); sort(num,num+n); //先给所有的数排序
for(int i=; i<n; ++i) //计算两两之间的差值
res[i-] = num[i] - num[i-]; sort(res,res+n-,cmp);//给差值按从大到小排序
int ans = num[n-] - num[]; //计算初始的最大差值 for(int i=; i<m-; ++i) //减去分段是舍弃的差值
ans -= res[i];
printf("Case #%d: %d\n",++cnt,ans);
}
return ;
}
UVALive - 6434 —(思维题)的更多相关文章
- UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)
UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There W ...
- UVALive.2995 Image Is Everything (思维题 三维坐标转换)
UVALive.2995 Image Is Everything (思维题 三维坐标转换) 题意分析 这题实在是没思路,就照着打了一遍,把不理解的地方,写了注释. #include <iostr ...
- UVALive.3708 Graveyard (思维题)
UVALive.3708 Graveyard (思维题) 题意分析 这标题真悲伤,墓地. 在周长为1e4的圆周上等距分布着n个雕塑,现在要加入进来m个雕塑,最终还要使得这n+m个雕塑等距,那么原来的n ...
- zoj 3778 Talented Chef(思维题)
题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...
- cf A. Inna and Pink Pony(思维题)
题目:http://codeforces.com/contest/374/problem/A 题意:求到达边界的最小步数.. 刚开始以为是 bfs,不过数据10^6太大了,肯定不是... 一个思维题, ...
- ZOJ 3829 贪心 思维题
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...
- 洛谷P4643 [国家集训队]阿狸和桃子的游戏(思维题+贪心)
思维题,好题 把每条边的边权平分到这条边的两个顶点上,之后就是个sb贪心了 正确性证明: 如果一条边的两个顶点被一个人选了,一整条边的贡献就凑齐了 如果分别被两个人选了,一作差就抵消了,相当于谁都没有 ...
- C. Nice Garland Codeforces Round #535 (Div. 3) 思维题
C. Nice Garland time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记
PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...
- HDU 1029 Ignatius and the Princess IV / HYSBZ(BZOJ) 2456 mode(思维题,~~排序?~~)
HDU 1029 Ignatius and the Princess IV (思维题,排序?) Description "OK, you are not too bad, em... But ...
随机推荐
- selenium+python 移动鼠标方法
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver=we ...
- 进程基本-进程创建,僵尸进程,exec系列函数
Linux系统中,进程的执行模式划分为用户模式和内核模式,当进程运行于用户空间时属于用户模式,如果在用户程序运行过程中出现系统调用或者发生中断事件,就要运行操作系统(即核心)程序,进程的运行模式就变为 ...
- 转转转![Spring MVC] - 500/404错误处理-SimpleMappingExceptionResolver
参考博客: http://www.cnblogs.com/dongying/p/6129937.html http://www.cnblogs.com/rollenholt/archive/2012/ ...
- appium的三种等待方式 (还没实践过,记录在此)
参考:https://testerhome.com/topics/2576
- Java 迭代器 Iterator
迭代器模式 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 迭代器模式属于行 ...
- 生成式对抗网络(GAN)
生成对抗网络(GAN),是深度学习模型之一,2014年lan Goodfellow的开篇之作Generative Adversarial Network, GAN概述 GAN包括两个模型,一个是生成模 ...
- C# mysql 连接Apache Doris
前提: 安装mysql odbc驱动程序,目前只不支持8.0的最新版本驱动,个人使用的是5.1.12的驱动(不支持5.2以上版本),下载地址为: x64: https://cdn.mysql.com ...
- 精《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #4 如何使用Git
HACK #4 如何使用Git 本节介绍Git的使用方法.Git是Linux内核等众多OSS(Open Source Software,开源软件)开发中所使用的SCM(Source Code Mana ...
- 温故而知新-strtok函数
温故而知新-strtok函数 记得之前没见过这个函数,是把字符串分割成更小的字符串 来个例子就是比较鲜明了 $string = "Hello world. Beautiful day tod ...
- XACT Q&A (转)
XACT Q&A 传送门:http://blog.csdn.net/xoyojank/article/details/4098633