题目转自hdu 1421,题目传送门


题目大意:

给你n个物品,你要搬走2*k个(也就是搬k次)

每次搬需要花费v,v=(ai-aj)2 (i表示左手拿的物品重量,j表示右手拿的物品的重量)

要求所有v相加得数最少

不难看出,这就像是01背包

这道题很水但我还是调了0.25h

感谢wsy大佬的帮助


解题思路:

emmm......

首先,这肯定是一个n*k的dp

其中,i表示有i个物品,j表示需要搬j回

那么我们可以得出它的转移方程:

dp[i][j]=min(dp[i-][j],dp[i-][j-]+(int)pow((w[i]-w[i-]),));

让后就很简单了

才怪,上面的我10min就想出来了,下面才让我最头疼

初始化

下面是我原来写的初始化:

memset(dp,0x7f,sizeof(dp));

然后各种WA

然后改了一下(25min),如下:

for(int i=;i<=n;i++) for(int j=;j<=k;j++) dp[i][j]=inf;

然后就AC了!!!

一个memset让我调了0.25h!(好不值)


以下是AC代码:

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<cmath>
#define inf 2147483647
using namespace std;
int n,k;
int w[];
int dp[][];
int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
for(int i=;i<=n;i++) for(int j=;j<=k;j++) dp[i][j]=inf;
// memset(dp,0x7f,sizeof(dp));
for(int i=;i<=n;i++) scanf("%d",&w[i]);
sort(w+,w++n);
dp[][]=;
for(int i=;i<=n;i++) for(int j=;*j<=i;j++)
{
dp[i][j]=min(dp[i-][j],dp[i-][j-]+(int)pow((w[i]-w[i-]),));
// cout<<"dp["<<i<<"]["<<j<<"]="<<dp[i][j]<<endl;
}
printf("%d\n",dp[n][k]);
}
return ;
}

从这道题我得到了一个深刻的教训

永远不要相信memset

这道题就这样水过了,就这样......

DP问题(2) : hdu 1421的更多相关文章

  1. hdu 1421:搬寝室(动态规划 DP + 排序)

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  2. 【dp】HDU 1421 搬寝室

    http://acm.hdu.edu.cn/showproblem.php?pid=1421 [题意] 给定n个数,要从n个数中选择k个二元组{x,y},最小化sum{(x-y)^2} 2<=2 ...

  3. 题解报告:hdu 1421 搬寝室(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1421 Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9 ...

  4. HDU 1421 搬寝室 (线性dp 贪心预处理)

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  5. [HDU 1421]搬寝室(富有新意的DP)

    题目地址:pid=1421" target="_blank">http://acm.hdu.edu.cn/showproblem.php? pid=1421 题目大 ...

  6. HDU 1421 DP

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  7. 搬寝室(HDU 1421 DP)

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  8. hdu 1421 搬寝室(dp)

    Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆, ...

  9. hdu 1421 搬寝室 (dp)

    思路分析: dp[i][j] 表示选取到第 i 个   组成了 j 对的最优答案. 当然排序之后 选取相邻两个是更优的. if(i==j*2) dp[i][j] = dp[i-2][j-1] + w[ ...

随机推荐

  1. Java连载1-概述&常用的dos命令

    本想写完那两个再开始新的,然而客观条件不允许,之前从未接触过Java,从零开始吧​!!! 一.概述 C盘下​:programme file 一般为64位程序安装的目录,programme file(X ...

  2. multer 基础教程(中文版)

    此文档于2016年10月3日翻译时multer的版本是1.2.0,它可能不是最新的! 甚至可能存在翻译错误!你可能需要阅读原版英语README 此文档仅供参考! Multer Multer 是一个 n ...

  3. app版本升级的测试点

    移动端版本更新升级是一个比较重要的功能点,主要分为强制更新和非强制更新. 1.强制更新需要测试的点有: 1)强制升级是否可以升级成功 从老版本的包升级到新版版的包是否可以升级成功. 2)升级后的数据是 ...

  4. redis之通信协议

    Redis 协议将传输的结构数据分为 5 种最小单元类型,单元结束时统一加上回车换行符号\r\n. 1.单行字符串 以 + 符号开头. 2.多行字符串 以 $ 符号开头,后跟字符串长度. 3.整数值 ...

  5. Nuget包管理工具(程序包控制台执行语句)

    NUGET命令 注:使用前确保nuget是最新版本,升级到最新版本有两种方式: (1).CMD将nuget升级到最新版本:nuget update -self (2).扩展中查看nuget是否需要更新 ...

  6. Autoware 培训笔记 No. 3——录制航迹点

    1.前言 航迹点用于知道汽车运行,autoware的每个航迹点包含x, y, z, yaw, velocity信息. 航迹点录制有两种方式,可以开车录制航迹点,也可以采集数据包,线下录制航迹点,我分开 ...

  7. 【题解】Dvoniz [COCI2011]

    [题解]Dvoniz [COCI2011] 没有传送门,只有提供了数据的官网. [题目描述] 对于一个长度为 \(2*K\) 的序列,如果它的前 \(K\) 个元素之和小于等于 \(S\) 且后 \( ...

  8. SqlServer 开篇简介

    实例:我们的电脑中可以安装一个或多个SqlServer实例,每一个SqlServer实例可以包含一个或者多个数据库. 架构:数据库中,又有一个或者多个架构.架构里面包含:表,视图,存储过程. 文件与文 ...

  9. C# NuGet常用命令

    命令执行位置:工具=〉Nuget包管理器=〉程序包管理器控制台 一.安装 1.安装指定版本类库install-package <程序包名> -version <版本号> 2.安 ...

  10. Linux文本文件——管理文本的命令

    Linux文本文件——管理文本的命令 摘要:本文主要学习了在Linux中管理文本的命令. cat命令 cat命令用来显示文本文件的内容,也可以把几个文件内容附加到另一个文件中,即连接合并文件,是Con ...