hdu1421_搬寝室
2015-11-01 11:43
302 查看
题目:搬寝室
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1421
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1421
#include<stdio.h> #include<algorithm> using namespace std; #define N 2100 typedef long long LL; LL dp [N/2]; //dp[i][j]: 前 i 件中拿走j对最少疲劳度 LL a ; //记录重量 LL fun(LL i,LL j) //一次性搬运第 i 件和第 j 件消耗的疲劳度 { return (a[j]-a[i])*(a[j]-a[i]); } LL min(LL a,LL b) { return a>b?b:a; } int main() { LL n,k; while(scanf("%I64d%I64d",&n,&k)!=EOF) { for(LL i=1;i<=n;i++) { scanf("%I64d",&a[i]); } sort(a,a+n+1); //关键的一步,排序,排完序以后每次拿走的某对就肯定是相邻的 for(LL i=0;i<=n;i++) for(LL j=0;j<=n/2;j++) dp[i][j]=10000000000000; for(LL i=0;i<=n;i++) //不管前几件,拿走0对疲劳度肯定为0 dp[i][0]=0; dp[2][1]=fun(2,1); //前两件取一对疲劳度固定 for(LL i=3;i<=n;i++) { for(LL j=1;j<=i/2;j++) { dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+fun(i-1,i)); //前i件取j件分两种情况: //1.第i件不取:那么最佳情况为dp[i-1][j]; //2.第i件取走:那么第j件必然和第j-1件一起拿,那么最佳为dp[i-2][j-1]+fun(i-1,i) } } printf("%I64d\n",dp [k]); } return 0; }
相关文章推荐
- 《正则表达式必知必会》读书笔记
- UVA 10082 WERTYU字符串处理
- 初识UML
- java.lang.String +concat(s1: String): String
- 配置zip版本的Tomcat启动
- FZU1608(线段树成段更新,区间求和pushdown延迟标记结构体版)
- PHP和Javascript访问数组和对象时的区别
- jquery ajax
- SQL数据库的基本操作
- 使用Onedrive
- 【转载】Linux下makefile详解--跟我一起写 Makefile
- Tomcat启动时选择加载项目
- 代码分析Android实现侧滑菜单
- Android绘图机制(三) ViewGroup类的延伸
- 电商搜索引擎的架构设计和性能优化
- linux yum源更新
- iOS动画效果和实现
- OC基础之 ---------- NSArray -------NSFileManager
- Thread和Runnnable的区别和联系
- Detected sqlite3 gem which is not supported on Heroku