HDU1421
提交啦n次一直WA,这个bug找啦几个小时,最终才发现数组开小啦,真是遗憾。这是一个典型的DP问题,题目要求从n个中选出k对使得最终疲劳度最小。首先对物品质量a[n]进行一次排序,用dp[i][j]表示从前i个物品中选取j对物品的最小疲劳度,现在我们来探讨状态转移方程,对于第i个物品,我们有选和不选两种选择(当i=2*j时必须选),若选择第i个物品则为啦使得最终疲劳度最小,第i个物品一定与第i-1个物品配对(为什么会是这样?),那么还需要在前i-2个物品中选取j-1对,那么此时dp[i][j]=dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]),若不选第i个物品 ,则问题转化为从前i-1个物品中选取j对物品,那么dp[i][j]=dp[i-1][j];于是得到以下状态转移方程:
dp[i][j]=min{dp[i-1][j,dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1])}(特别的当i=2*j时候,只能dp[i][j]=dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]));
#include<iostream>
#include<algorithm>
using namespace std;
#define max 2000
int dp[max][1000];
int DP(int a[],int n, int k);
int main(){
int n,k,i;
int a[max];
while (cin >> n >> k){
for (i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + n + 1);
cout << DP(a, n, k) << endl;
}
return 0;
}
int DP(int a[], int n, int k){
int i, j,t;
for (i = 0; i <= n; i++)
dp[i][0] =0; //将第一列初始化为0
for (i = 2; i <= n;i++)
for (j = 1; j <= k&&j <= i / 2; j++){ /*当j>i/2无意义,可以不计算*/
t = dp[i - 2][j - 1] + (a[i] - a[i - 1])*(a[i] - a[i - 1]);
if (j * 2 == i)
dp[i][j] = t; //出现i==2j时特殊处理,因为此时不存在dp[i-1][j]
else
dp[i][j] = t < dp[i - 1][j] ? t : dp[i - 1][j];
}
return dp[n][k];
}
HDU1421的更多相关文章
- DP HDU1421
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- hdu1421 搬寝室(dp)
此题是动态规划题. 解题思路: 用w[i]存储n个物品的重量,对其进行排序. 那么当取了第i个物品,必然会取第i-1个物品. 令dp[i][j]表示前i个物品,取j对的最小疲劳度. 若取第i个物品 则 ...
- hdu---(1421)搬寝室(dp)
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- hdu1421 搬寝室 DP
转载: /*证明:从4个数中 a b c d 依次递增: 选取相邻的两个数一定是最小得 及:(a-b)^2+(c-d)^2<(a-c)^2+(b-d)^2&&(a-b)^2+( ...
- HDU1421搬寝室(简单DP)
当然,还可以加滚动数组优化. #include<cstdio> #include<cstdlib> #include<iostream> #include<m ...
- hdu-1421(dp)
解题思路:dp[i][j]表示前i个物品中取k对所要的最小花费: 首先得对物品进行处理,因为需要当前物品减前一个物品的平方和最小: 所以先排序,因为排序的相邻两个的差的平方一定最小: 然后转移方程:d ...
- HDU-1421 搬寝室【dp】
题目链接:https://vjudge.net/contest/214662#problem/E 题目大意: ...
- hdu1421搬寝室(动态规划)
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- HDU1421:搬寝室(线性dp)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1421 又是一道,没有思想的题,看了题解,我发现我的dp题几乎都看了题解,我总是想不好状态转移方程,汗颜,以 ...
随机推荐
- leetcode 【 Reverse Linked List II 】 python 实现
题目: Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1- ...
- IOS开发学习笔记038-autolayout 自动布局 界面实现
在storyboard/xib文件中实现自动布局 autolayout 1.注意事项 autolayout和frame属性是有冲突的,所以如果准备使用autolayout,就不要再代码中对控件的fra ...
- jmter+ANT+jekins之配置文件简单优化(build.xml)
<?xml version="1.0" encoding="utf-8"?> <project name="ant-jmeter-t ...
- 菜鸟之路——机器学习之KNN算法个人理解及Python实现
KNN(K Nearest Neighbor) 还是先记几个关键公式 距离:一般用Euclidean distance E(x,y)√∑(xi-yi)2 .名字这么高大上,就是初中学的两点间的距离 ...
- 【bzoj4199】[Noi2015]品酒大会 后缀自动机求后缀树+树形dp
题目描述(转自百度文库) 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项,吸引了众多品酒师参加. 在大会的晚餐上,调酒 ...
- 洛谷P3832 [NOI2017]蚯蚓排队 【链表 + 字符串hash】
题目链接 洛谷P3832 题解 字符串哈希然后丢到hash表里边查询即可 因为\(k \le 50\),1.2操作就暴力维护一下 经复杂度分析会发现直接这样暴力维护是对的 一开始自然溢出WA了,还以为 ...
- svg动画 之 我的自制太阳系
SVG意为可缩放矢量图形,svg的图片与普通的jpg,png等图片相比,其优势在于不失真.一般普通的图片放大后,会呈现出锯齿的形状,但是svg图片则不会这样,它可以被高质量地打印. 现在就用dream ...
- JavaScript (JS)基础:ECMAScript 浅析 (含Math基本方法解析)
浏览器端JavaScript的组成 ECMAScript:语法规范 DOM:Document Object Model 文档对象模型,操作页面元素 BOM:Browser Object Model ...
- 使用 swagger组件给asp.net webapi文档生成
1.名词解释 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模 ...
- Windows通过data文件夹恢复mysql数据库
mysql--1146--报错 先找到数据库存放地址,即Data文件夹(复制留下来) 再用电脑管家把所有的mysql卸载 然后把mysql文件夹弄走(卸载不会清掉它,需手动,一般在C:\Program ...