HDU 1421搬寝室 DP
来源:互联网 发布:淘宝美工修图技巧 编辑:程序博客网 时间:2024/05/16 23:55
http://acm.hdu.edu.cn/showproblem.php?pid=1421
先进行排序,前i个物品,取K对,对于第i个物品是否取得, 若不取 ,此时 为 前i-1个物品取K对的值, 若取, 则第i个和第i-1个要组成一对同时取得,此时 为 前i-2个物品取k-1对的值 + i和i-1 之差的平方。
状态转移方程 dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(num[i]-num[i-1])*(num[i]-num[i-1]));
同时注意一下初始值
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#define PI acos(-1.0)#define max(a,b) (a)>(b)? (a):(b)#define min(a,b) (a)>(b)? (b):(a)#define INT_MIN -0x7FFFFFFF#define INT_MAX 0x7FFFFFFFint num[2005];int dp[2005][1005];int cmp(const void *p1,const void *p2){ return *(int *)p1- *(int *)p2;}int main(){ // freopen("in.txt","r",stdin); int i,j,k,n,m; while(scanf("%d%d",&n,&k)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&num[i]); qsort(num+1,n,sizeof(num[0]),cmp); //memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) for(j=1;j<=k;j++) dp[i][j]=100000000; for(i=1;i<=n;i++) { for(j=1;j<=k;j++) { if(i>=2*j) dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(num[i]-num[i-1])*(num[i]-num[i-1])); } } printf("%d\n",dp[n][k]); } return 0;}
- hdu 1421 搬寝室 (DP)
- Hdu 1421 搬寝室 dp
- hdu 1421 搬寝室(DP)
- hdu 1421 搬寝室 dp
- HDU-1421 搬寝室-dp
- HDU 1421搬寝室 DP
- HDU 1421 搬寝室 DP
- hdu 1421 搬寝室(dp)
- HDU-1421-搬寝室(DP)
- HDU 1421 搬寝室(dp)
- HDU 1421 搬寝室(DP)
- 搬寝室 -HDU 1421 dp
- HDU 1421 搬寝室(DP)
- hdu 1421 搬寝室 dp
- HDU 1421 搬寝室[DP]
- hdu 1421 搬寝室 DP
- HDU 1421 搬寝室 (DP)
- HDU 1421--搬寝室【DP】
- NSUserDefaults的存取
- hadoop2之HDFS分析:Client与DataNode流程分析
- 图解JSP执行过程
- apache启动失败
- 【rzxt】_快速关闭WinXP的还原功能有绝招
- HDU 1421搬寝室 DP
- hibernate annotation 生成uuid主键
- 解决Sublime Text 2中文显示乱码问题
- 精致电子工程师
- SQL之用户自定义函数
- 变量重复定义
- hibernate annotation 之 一对多、多对一双向外键关联
- Linux内核-----early_param原理追踪
- 前滚和回滚撤销