hdu 1421 搬寝室,dp
2016-02-17 17:16
363 查看
题意:
在n个物品里面选取k对物品,使这k对物品的平方差之和最小。
分析:
一道典型的dp题目。
dp[i][j]表示的是在前i个物品里面选取j对的品方差之和,其中i大于等于j*2
我们对,物品排序之和会发现,由于是平方差之和,那么一个数字一般只会和他前面的一个数字或者后面的数字组合。
这样我们来想递推方程的时候会简单很多的。
dp[i][j] 有两种方式可以得到,一种是这j对物品中包括第i个物品,一种是不包括,包括i的话,那么i物品一定会和i-1物品配对,然后加上在前i-2个物品中选取j-1对,
这时就是dp[i-2][j-1]+(val[i]-val[i-1])*(val[i]-val[i-1]);
不包括i的话,那么就直接是dp[i-1][j],选取两者中的较小值就可以了的。
但我们应该注意到,若i是偶数并且j*2正好等于i的话,那么就没有dp[i-1][j],这时候直接等于dp[i-2][j-1]+(val[i]-val[i-1])*(val[i]-val[i-1])。
在n个物品里面选取k对物品,使这k对物品的平方差之和最小。
分析:
一道典型的dp题目。
dp[i][j]表示的是在前i个物品里面选取j对的品方差之和,其中i大于等于j*2
我们对,物品排序之和会发现,由于是平方差之和,那么一个数字一般只会和他前面的一个数字或者后面的数字组合。
这样我们来想递推方程的时候会简单很多的。
dp[i][j] 有两种方式可以得到,一种是这j对物品中包括第i个物品,一种是不包括,包括i的话,那么i物品一定会和i-1物品配对,然后加上在前i-2个物品中选取j-1对,
这时就是dp[i-2][j-1]+(val[i]-val[i-1])*(val[i]-val[i-1]);
不包括i的话,那么就直接是dp[i-1][j],选取两者中的较小值就可以了的。
但我们应该注意到,若i是偶数并且j*2正好等于i的话,那么就没有dp[i-1][j],这时候直接等于dp[i-2][j-1]+(val[i]-val[i-1])*(val[i]-val[i-1])。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> using namespace std; #define size 2005 int dp[size][1005]; int val[size] ; int main() { int n,k; while (scanf("%d%d",&n,&k)!=EOF) { val[0] = 0; for(int i = 1 ; i <= n ; i++) { scanf("%d",&val[i]); } sort(val+1,val+n+1); memset(dp,0,sizeof(dp)); for (int i = 2 ; i <= n ; i++) { for (int j = 1 ; j*2 <= i ; j++) { if(j*2==i) dp[i][j] = dp[i-2][j-1]+(val[i]-val[i-1])*(val[i]-val[i-1]); else dp[i][j] = min(dp[i-1][j],dp[i-2][j-1]+(val[i]-val[i-1])*(val[i]-val[i-1])); //dp[i][j] = min(dp[i-2][j-1]+(val[i]-val[i-1])*(val[i]-val[i-1]),dp[i-1][j]); } } printf("%d\n",dp [k]); } return 0; }
相关文章推荐
- 最新获取屏幕宽高
- LeetCode 165. Compare Version Numbers 解题报告
- 【转】Nginx搭建反向代理服务器过程详解
- PHP获取时间排除周六、周日的两个方法
- Java程序员常用工具类库 - 目录(转)
- 许朝军
- Relative 定位与Absolute 定位实例
- Lastpass——密码管理工具
- SourceTree 安装教程
- android window 一些属性说明
- HDU ACM 1050 Moving Tables(贪心 + 区间覆盖问题)
- Apache与Tomcat有什么关系和区别
- Dex文件结构及对应的数据结构
- Xcode LaunchImage 载入界面大小设置
- linux date -d 的一些使用方法
- 年后小结
- [转] 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果 ---张鑫旭
- SQL 常用方法
- java基础
- hbase0.98暴力数据迁移方案