简单dp题。

这样的,意思为给你n个数,要你现在将这n个数分为m组,使得所有组内最大值与最小值的差的和最小。

其实可以这样来考虑这个问题,首先可以把所有的数字从小到大排个序,显然如果有一种取法是最优的,那么所有的组里面的数一定是从小到大排序后中间的一段。

那么这样就可以dp了,f[i][j]表示前i个数分为j组,最小需要花费的代价,这样对于i+1,我们只要直接枚举最后一位数的切断的位置即可。

时间复杂度:O(N^3)

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define maxn 105
using namespace std; int n,m,a[maxn],f[maxn][maxn],t,cas=; int main()
{
scanf("%d",&t);
while (t--)
{
memset(a,,sizeof a);
memset(f,0x3f,sizeof f);
scanf("%d%d",&n,&m);
for (int i=; i<=n; i++) scanf("%d",&a[i]);
sort(a+,a++n);
for (int i=; i<=n; i++) f[i][]=a[i]-a[];
for (int i=; i<=n; i++)
for (int j=; j<i; j++)
{
for (int k=; k<=j && k<m; k++)
f[i][k+]=min(f[i][k+],f[j][k]+a[i]-a[j+]);
}
printf("Case #%d: %d\n",++cas,f[n][m]);
}
return ;
}

最新文章

  1. [转]jQuery操作radio、checkbox、select 集合.
  2. go的markdown解析库和session库
  3. DIV 文字强制换行
  4. 使用Visual Studio Code搭建TypeScript开发环境
  5. 21335592 ROWS
  6. Qt中使用随机数
  7. SQL SERVER 设置自动备份和删除旧的数据库文件
  8. C#中有关字符串去重的解决方案
  9. jxl对excel删除行
  10. ubuntu上的mysql数据库双机备份设置
  11. C语言格式化输入输出
  12. 201521123026《Java程序设计》第2周学习总结
  13. CF1157C1-Increasing Subsequence (easy version)题解
  14. xss攻击与防御
  15. React-Route的属性exact
  16. mybatis插入数据库 返回主键
  17. Android Bundle存储数据类型
  18. 腾讯云CMQ消息队列测试
  19. 20155233 《Java程序设计》 第十一周课堂练习总结
  20. ThinkPHP开发笔记-前后端数据交互

热门文章

  1. 20155239 2016-2017-2 《Java程序设计》第9周学习总
  2. MYSQL查看当前正在使用的数据库命令
  3. JS Windows.document对象
  4. hdu2061 Treasure the new start, freshmen!(暴力简单题)
  5. python爬取斗图网中的 “最新套图”和“最新表情”
  6. Django——多网页网站及网页互联
  7. 【xml_Class、xmlElementNode_Class 类】使用说明
  8. vps搭建个人网盘不二之选—kodexplorer介绍,包含安装步骤
  9. Twitter推广消息可使品牌线下销售额增长三成
  10. C# 反射,动态编译