uva 10271 DP

题意:

有很多筷子,每个筷子的长度不同,每个人用三支筷子,假设这三只筷子的长度为 A,B, C( A <= B <= C ) 则 badness 为( A - B )^2 

现在有K+8个人,要求选出K+8组筷子,使总badness最小


首先状态转移方程不用多说 dp【i】【j】 表示从前j只筷子 选出 3*i只 来供前i个人使用

dp[i][j] = min( dp[i][j], dp[i-1][j-2] + ( num[j] - num[j-1] ) * ( num[j] - num[j-1] ) );

dp[i][j] = min( dp[i][j-1], dp[i][j] );


但是这样有一个问题,你选出了i对筷子后,还需要有更长的筷子来配对,才能供一个人使用!

这怎么办呢?

只需要对筷子长度从大大小排序,然后在转移的时候满足 3 * i <= j

为什么呢?

不好讲,你想一想递推的过程就可以知道,从最开始就能满足题目要求。。。。。。。。

AC代码如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值