DP HDU1421】的更多相关文章

搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 26726    Accepted Submission(s): 9218 Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是…
此题是动态规划题. 解题思路: 用w[i]存储n个物品的重量,对其进行排序. 那么当取了第i个物品,必然会取第i-1个物品. 令dp[i][j]表示前i个物品,取j对的最小疲劳度. 若取第i个物品 则:dp[i][j]=dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]): 若不取第i个物品 则:dp[i][j]=dp[i-1][j]: 所以状态转移方程为:dp[i][j]=min(dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]),dp…
搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 17687    Accepted Submission(s): 6000 Problem Description 搬 寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物 品,xhd开始发呆,因为…
转载: /*证明:从4个数中 a b c d  依次递增: 选取相邻的两个数一定是最小得 及:(a-b)^2+(c-d)^2<(a-c)^2+(b-d)^2&&(a-b)^2+(c-d)^2<(a-d)^2+(b-c)^2; ]-a[i])); */ 我的AC代码: #include<cstdlib> #include<iostream> #include<cstdio> #include<cstring> #include<…
当然,还可以加滚动数组优化. #include<cstdio> #include<cstdlib> #include<iostream> #include<memory.h> #include<cmath> #include<algorithm> using namespace std; ; ],dp[][]; int main() { int n,K,i,j; while(~scanf("%d%d",&n…
解题思路:dp[i][j]表示前i个物品中取k对所要的最小花费: 首先得对物品进行处理,因为需要当前物品减前一个物品的平方和最小: 所以先排序,因为排序的相邻两个的差的平方一定最小: 然后转移方程:dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+w); #include<iostream> #include<algorithm> #include<math.h> #define maxn 2005 #define inf 2147483646…
题目链接:https://vjudge.net/contest/214662#problem/E 题目大意:                                                          搬寝室 Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1421 又是一道,没有思想的题,看了题解,我发现我的dp题几乎都看了题解,我总是想不好状态转移方程,汗颜,以后怎么比赛啊. 先排序,然后说一个数学问题. 首先,要怎么搬呢?即每一对要怎么取?如果有abcd四个数,且a<b<c<d,应该是取ab,cd好呢还是ac,bd好?抑或是bc,ad好呢?答案是第一种,因为: (a-b)^2+(c-d)^2 < (a-c)^2+(b-d)^2 (a-b)^…
用dp[i][j]表示放了i件物品,j对时的最小值. dp[i-2][j-1]表示取当前的 dp[i-1][j]表示不取当前的. #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define maxn 2002 #define INF 99999999 ],a[maxn]; int min(int x,int y) { return x<y?x:y; }…
http://acm.hdu.edu.cn/showproblem.php?pid=1421; 思路:先将所给的椅子的价值按升序排列,举个例子,四张椅子的价值分别为a,b,c,d(a<b<c<d); 那么分别两两组合(ab)(cd): (ac)(bd);(ad)(bc); 三种价值分别为(a-b)2+(c-d)2,(a-c)2+(b-d)2,(a-d)2+(b-c)2: 那么要比较它们的大小只要比较非平方项的大小就可以了. (ab+cd),(ac+bd),(ad+bc); 两两项相减比较…