题目链接:HDU - 1500

In China, people use a pair of chopsticks to get food on the table, but Mr. L is a bit different. He uses a set of three chopsticks -- one pair, plus an EXTRA long chopstick to get some big food by piercing it through the food. As you may guess, the length of the two shorter chopsticks should be as close as possible, but the length of the extra one is not important, as long as it's the longest. To make things clearer, for the set of chopsticks with lengths A,B,C(A<=B<=C), (A-B)^2 is called the 'badness' of the set.
It's
December 2nd, Mr.L's birthday! He invited K people to join his birthday
party, and would like to introduce his way of using chopsticks. So, he
should prepare K+8 sets of chopsticks(for himself, his wife, his little
son, little daughter, his mother, father, mother-in-law, father-in-law,
and K other guests). But Mr.L suddenly discovered that his chopsticks
are of quite different lengths! He should find a way of composing the
K+8 sets, so that the total badness of all the sets is minimized.
Input
The
first line in the input contains a single integer T, indicating the
number of test cases(1<=T<=20). Each test case begins with two
integers K, N(0<=K<=1000, 3K+24<=N<=5000), the number of
guests and the number of chopsticks. There are N positive integers Li on
the next line in non-decreasing order indicating the lengths of the
chopsticks.(1<=Li<=32000).
Output
For each test case in the input, print a line containing the minimal total badness of all the sets.
题意描述:有K+8个人,每个人用3根筷子,现在有n根筷子,知道每根筷子的长度,要求给这些人分配一些筷子,使得每个人短的那两根筷子的差值平方总和最小。
算法分析:对筷子长度从大到小排序,dp[i][j]表示前i个人j根筷子的最优解。
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define inf 0x7fffffff
using namespace std;
const int maxn=+; int k,n,num[maxn];
int dp[+][maxn]; int main()
{
int t;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&k,&n);
for (int i=n ;i>= ;i--) scanf("%d",&num[i]);
k += ;
memset(dp,,sizeof(dp));
for (int i= ;i<=k ;i++)
{
dp[i][*i]=dp[i-][*i-]+(num[*i-]-num[*i])*(num[*i-]-num[*i]);
for (int j=*i+ ;j<=n ;j++)
dp[i][j]=min(dp[i][j-],dp[i-][j-]+(num[j-]-num[j])*(num[j-]-num[j]));
}
printf("%d\n",dp[k][n]);
}
return ;
}

hdu 1500 Chopsticks DP的更多相关文章

  1. hdu 1500 Chopsticks

    http://acm.hdu.edu.cn/showproblem.php?pid=1500 dp[i][j]为第i个人第j个筷子. #include <cstdio> #include ...

  2. hdu 4123 树形DP+RMQ

    http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...

  3. hdu 4507 数位dp(求和,求平方和)

    http://acm.hdu.edu.cn/showproblem.php?pid=4507 Problem Description 单身! 依旧单身! 吉哥依旧单身! DS级码农吉哥依旧单身! 所以 ...

  4. hdu 3709 数字dp(小思)

    http://acm.hdu.edu.cn/showproblem.php?pid=3709 Problem Description A balanced number is a non-negati ...

  5. hdu 4352 数位dp + 状态压缩

    XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. hdu 4283 区间dp

    You Are the One Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化

    HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...

  8. HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)

    HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化) 题意分析 先把每种硬币按照二进制拆分好,然后做01背包即可.需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数 ...

  9. HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化)

    HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化) 题意分析 给出一系列的石头的数量,然后问石头能否被平分成为价值相等的2份.首先可以确定的是如果石头的价值总和为奇数的话,那 ...

随机推荐

  1. Linq中Count()和Any()引发的效率问题

    1.count和any 今天看了鹤冲天的文章:Linq:切勿使用 Count() > 0 来判断集合非空   有所收获,写下文章总结一下: 先看如下代码: static void Main(st ...

  2. WMware给centos6.8虚拟机添加硬盘

    背景 用WMware运行系统经常遇见系统磁盘不够用的情况,通常解决这个问题有两种方式: 1) 给现有磁盘扩容: 2) 给虚拟机添加一块虚拟硬盘: 磁盘扩容我还没试验成功,这里我先把给虚拟机添加一块硬盘 ...

  3. android配置开发环境

    1.下载Java SE并安装. 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 配置环境变量 我的电脑- ...

  4. 如何出发匿名映射呀【log】

    malloc-9711 [002] .... 40794.642938: mm_vmscan_lru_shrink_inactive: nid=0 zid=1 nr_scanned=3 nr_recl ...

  5. Angular & RxJS & Typesc­ript

    Angular & RxJS & Typesc­ript https://www.wmnetwork.cc/d/?mid=75627 杭州经开区国际创博中心 https://www.w ...

  6. HDU 6034 Balala Power!(贪心+排序)

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  7. [poj] 3090 Visible Lattice Points

    原题 欧拉函数 我们发现,对于每一个斜率来说,这条直线上的点,只有gcd(x,y)=1时可行,所以求欧拉函数的前缀和.2*f[n]+1即为答案. #include<cstdio> #def ...

  8. POJ 3264 Balanced Lineup | st表

    题意: 求区间max-min st表模板 #include<cstdio> #include<algorithm> #include<cstring> #inclu ...

  9. BZOJ5158 [Tjoi2014]Alice and Bob 【贪心 + 拓扑】

    题目链接 BZOJ5158 题解 题中所给的最长上升子序列其实就是一个限制条件 我们要构造出最大的以\(i\)开头的最长下降子序列,就需要编号大的点的权值尽量小 相同时当然就没有贡献,所以我们不妨令权 ...

  10. 交叉编译VIM并移植到ARM嵌入式Linux系统

    原创作品,允许转载,转载时请务必以超链接形式标明文章.作者信息和本声明,否则将追究法律责任.   众所周知,vim是vi的增强版本,实际体验要比vi好用很多,由于笔者为ARM系统制作的基于busybo ...