洛谷2301

题目描述

眼看着老师大军浩浩荡荡的向机房前进。LOI 的同学们决定动用自己的力量来保卫他们的好朋友loidc。现在每个人都要挑选自己的武器——两根木棍。一根用做远距离投掷,另一根用做近距离搏斗。每个人都想挑到最好的,但这是不可能的。但是为了让多数人满意,也为了减少大家的矛盾。cony设计了一个矛盾指数,这个指数就是每个人的不舒服指数和,不舒服指数就(L1-L2)^2,其中L1,L2分别是两根木棍的长度。

cony决定让矛盾指数最少,于是他来向你寻求帮助,希望你能告诉他矛盾指数至少有多少。

输入输出格式

输入格式:
第一行两个数m,n.

表示有n个人,m个木棍。

接下来m个数表示每个木棍(肯定有解)。

(m<=2000,n<=500)

输出格式:
一个数,最少的矛盾指数。

输入输出样例

输入样例#1:
5 2
3
1
4
5
8
输出样例#1:
5

分析:

先排序,显然组成一对的木棍必相邻才是最优的。

故得到方程

f[i,j]=min(f[i-1,j],f[i-2,j-1]+sqr(a[i]-a[i-1])) i=2..m

初值f[i,0]:=0;

代码:

program work;
var
f:array[..,..]of int64;
a:array[..]of int64;
n,i,m,j:longint; t:int64;
function min(x,y:int64):int64;
begin
if x<y then min:=x else min:=y;
end;
begin
readln(m,n);
for i:= to m do readln(a[i]);
for i:= to m- do
for j:=i+ to m do
if a[i]>a[j] then
begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end;
for i:= to m do
for j:= to n do f[i,j]:=maxlongint*;
f[,]:=; f[,]:=;
for i:= to m do
for j:= to min(m div ,n) do
f[i,j]:=min(f[i-,j],f[i-,j-]+sqr(a[i]-a[i-]));
writeln(f[m,n]);
end.

最新文章

  1. android 音乐播放器
  2. Arduino单片机使用和开发问题记录
  3. 并发工具类(三)控制并发线程数的Semaphore
  4. 如何使用和了解ALTERA的IP核
  5. 【BZOJ】【1101】【POI2007】Zap
  6. Git命令参考手册(转)
  7. 【LeetCode练习题】Validate Binary Search Tree
  8. 【Zookeeper】源码分析之请求处理链(二)
  9. zkCli的使用 常用的节点增删改查命令用法
  10. mui-选项卡+scroll滚动
  11. detectMultiScale 读取冲突的一个解决方法
  12. JAVA SpringBoot 项目打包(JAR),在打包成 docker 镜像的基本方法
  13. java面试题:多线程与并发
  14. React 安装
  15. 配置Codis-FE(管理界面)
  16. 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)
  17. Ubuntu pydot failed to call GraphViz.Please install GraphViz 解决方法
  18. Hadoop基础-MapReduce的工作原理第一弹
  19. 利率计算v4.0--测试--软件工程
  20. 关于.NET Core 2.0.2升级到2.1.1版本相关问题

热门文章

  1. 在CentOS 7上搭建Docker环境
  2. PHP-入门指引1
  3. python中字典的遍历
  4. spring-boot整合ehcache实现缓存机制
  5. java web相对路径和绝对路径总结
  6. SapScript
  7. Android开发——View动画、帧动画和属性动画详解
  8. Android 数据库 ANR的例子
  9. json 处理日期格式
  10. 「日常训练」 神、上帝以及老天爷 (HDU 2048)