筷子
来源:互联网 发布:mysql 好友关系表 编辑:程序博客网 时间:2024/05/17 06:52
筷子
A先生有很多双筷子。确切的说应该是很多根,因为筷子的长度不一,很难判断出哪两根是一双的。这天,A先生家里来了K个客人,A先生留下他们吃晚饭。加上A先生,A夫人和他们的孩子小A,共K+3个人。每人需要用一双筷子。A先生只好清理了一下筷子,共N根,长度为T1,T2,T3,……,TN.现在他想用这些筷子组合成K+3双,使每双的筷子长度差的平方和最小。(怎么不是和最小??这要去问A先生了,呵呵)
输入
输入文件共有两行,第一行为两个用空格隔开的整数,表示 N,K(1≤N≤100, 0<K<50),第二行共有N个用空格隔开的整数,为Ti.每个整数为1~50之间的数。
输出
输出文件仅一行。如果凑不齐 K+3双,输出-1,否则输出长度差平方和的最小值。
样例
chop.in
10 1
1 1 2 3 3 3 4 6 10 20
chop.out
5
说明
第一双 1 1
第二双 2 3
第三双 3 3
第四双 4 6
(1-1)^2+(2-3)^2+(3-3)^2+(4-6)^2=5
解释:
f[i][j]表示前i根筷子凑成j双的最小平方值
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;int f[150][150],a[150];int main(){int n,k,i,j; scanf("%d%d",&n,&k);k+=3;if (k*2>n) {printf("-1"); return 0;}for (i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); memset(f,0x7f,sizeof(f)); for (i=0;i<=n;i++) f[i][0]=0; for (i=2;i<=n;i++)//前i根分为j双 for (j=1;j<=k;j++) f[i][j]=min(f[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]),f[i-1][j]); printf("%d",f[n][k]);}
0 0
- 筷子
- 筷子
- 筷子
- 筷子
- 筷子
- 筷子
- 筷子 、森林
- 【DP】筷子
- 筷子问题
- 使用筷子礼仪
- 老男孩 - 筷子兄弟
- 肖央---筷子兄弟
- njupt 1581 筷子 DP
- 动态规划之 <筷子>
- 筷子 - NJUPT 1851 dp
- [DP]筷子1/2
- 南邮 OJ 1581 筷子
- 筷子 解题报告
- rgb颜色对照表
- JavaScript变量作用域和变量提升
- eclipse中其他文件中文乱码解决方法
- 周易六十四卦——风山渐卦
- 语法推导树之短语,直接短语,句柄
- 筷子
- MySQL数据类型
- 我自己认为的一些Java基础
- Gradle环境变量的配置
- HashMap面试题总结!
- 二叉搜索树转化为双向链表
- JDBC学习笔记及连接数据库的实现过程
- WPF ControlTemplate和dataTemplate的区别
- 短时傅里叶分析:spectrogram函数