首页 > 其他分享 >hdu:搬寝室

hdu:搬寝室

时间:2023-08-26 15:00:28浏览次数:51  
标签:hdu 件物品 xhd int 疲劳度 寝室 dp

Problem Description
搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2k件过去就行了.但还是会很累,因为2k也不小是一个不大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和左右手的物品的重量差的平方成正比(这里补充一句,xhd每次搬两件东西,左手一件右手一件).例如xhd左手拿重量为3的物品,右手拿重量为6的物品,则他搬完这次的疲劳度为(6-3)^2 = 9.现在可怜的xhd希望知道搬完这2*k件物品后的最佳状态是怎样的(也就是最低的疲劳度),请告诉他吧.

Input
每组输入数据有两行,第一行有两个数n,k(2<=2*k<=n<2000).第二行有n个整数分别表示n件物品的重量(重量是一个小于2^15的正整数).

Output
对应每组输入数据,输出数据只有一个表示他的最少的疲劳度,每个一行.

Sample input
2 1
1 3
Sample output
4

dp

二维dp,注意赋初值

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e3+10;

int a[N],dp[N][N>>1];//dp[i][j]表示从i件物品里选出j对的体力损失最小值

inline int cal(int i,int j)
{
	return (a[i]-a[j])*(a[i]-a[j]);
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n,k;
    while(cin>>n>>k)
    {
        for(int i=1;i<=n;++i) cin>>a[i];
        sort(a+1,a+1+n);
        
        memset(dp,0x3f,sizeof dp);
        for(int i=0;i<=n;++i)//注意初始赋值需要将所有的dp[i][0]置为0
        dp[i][0]=0;
        for(int i=2;i<=n;++i)
         for(int j=1;j<=i/2;++j)
         dp[i][j]=min(dp[i-2][j-1]+cal(i,i-1),dp[i-1][j]);
        //假如第i件没被选入第j对,dp[i][j]=dp[i-1][j]
        //假如选中,一定和相邻的前一件一起选
        //dp[i][j]=dp[i-2][j-1]+cal(i,i-1);
        cout<<dp[n][k]<<'\n';
    }
    return 0;
}

标签:hdu,件物品,xhd,int,疲劳度,寝室,dp
From: https://www.cnblogs.com/ruoye123456/p/17001046.html

相关文章

  • hdu:不容易系列之(3)—— LELE的RPG难题
    ProblemDescription人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即”可乐”),经过多方打探,某资深Cole终于知道了原因,原来,LELE最近研究起了著名的RPG难题:有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要......
  • hdu:畅通工程(并查集)
    ProblemDescription某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?Input测试输入包含若干......
  • hdu:田忌赛马(贪心,双指针)
    ProblemDescription“田忌赛马”是中国历史上一个著名的故事。大约2300年前,齐国大将田忌喜欢和国王赛马,并且约定:每赢一场,对方就要付200元。假设已知田忌和国王的各自马匹的速度都不相同,请计算田忌最好的结果是什么。Input输入包含多组测试样例。每组样例的第一行是一个整数......
  • hdu:老鼠和猫的交易(贪心)
    ProblemDescription小老鼠准备了M磅的猫粮,准备去和看守仓库的猫做交易,因为仓库里有小老鼠喜欢吃的五香豆。仓库有N个房间;第i个房间有J[i]磅的五香豆,并且需要用F[i]磅的猫粮去交换;老鼠不必交换该房间所有的五香豆,换句话说,它可以用F[i]a%磅的猫粮去换取J[i]a%磅的五香豆,其......
  • hdu 1003 最大最长上升子序列 贪心
    要想找到符合条件的序列,我们应该有以下条件 一个数重头开始遍历相加,如果这个数大于0的话,继续加后面的数,如果小于0的话,重后面的数开始重新遍历;这个过程中保证了大数一定会出现,所以应该找出大数;sum大于0的话,与后面的数相加有可能是最大数;如果小于0,则,重新开始会比以前的数更大;一下是......
  • hdu 1003 最大最长子序列 dp
    我的dp思路是记b[j]表示到到j位,最大最长的子序列的和则可得状态转移方程b[j]=max(b[j-1]+a[j],a[j]);因为每个数都有两种状态,要么和前面相连,要么自己相连;让后再比较出来最大值;一下是我的代码#include<stdio.h>#include<stdlib.h>#include<stdlib.h>#include<math.h>#includ......
  • hdu 4055
    http://acm.hdu.edu.cn/showproblem.php?pid=4055#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>usingnamespacestd;constintmod=1000000007;constintsiz......
  • hdu 4055 dp
    http://acm.hdu.edu.cn/showproblem.php?pid=4055#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>usingnamespacestd;constintmod=1000000007;cons......
  • hdu 2191 多重背包
    http://acm.hdu.edu.cn/showproblem.php?pid=2191#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>usingnamespacestd;structele{intprice;......
  • 「HDU1166」敌兵布阵
    前言题目好多废话大意有一个序列,开始时每一位都有一个值,然后是若干个命令:Addij,表示第\(i\)位增加\(j\);Subij,表示第\(i\)位减少\(j\);Queryij,表示从第\(i\)位到地\(j\)位的总和;End,表示结束,在每组数据最后出现。思路这题一眼盯真,可以用线段树或者树状数组解决,都是单......