题目描述

Frank是一个非常喜爱整洁的人。他有一大堆书和一个书架,想要把书放在书架上。书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上。但是Frank发现,由于很多书的宽度不同,所以书看起来还是非常不整齐。于是他决定从中拿掉k本书,使得书架可以看起来整齐一点。

书架的不整齐度是这样定义的:每两本书宽度的差的绝对值的和。例如有4本书:

1x2 5x3 2x4 3x1 那么Frank将其排列整齐后是:

1x2 2x4 3x1 5x3 不整齐度就是2+3+2=7

已知每本书的高度都不一样,请你求出去掉k本书后的最小的不整齐度。

输入输出格式

输入格式:

第一行两个数字n和k,代表书有几本,从中去掉几本。(1<=n<=100, 1<=k<n)

下面的n行,每行两个数字表示一本书的高度和宽度,均小于200。

保证高度不重复

输出格式:

一行一个整数,表示书架的最小不整齐度。

输入输出样例

输入样例#1:

4 1
1 2
2 4
3 1
5 3

输出样例#1:

3

Solution:

  本题换个思维,$n$个去掉$k$个等同于选$n-k$个物品,于是很容易就想到了背包。

  对高度排序后的物品,定义状态$f[i][j]$表示前$j$个物品中选了$i$个物品的最小值,则初始状态$f[1][i]=0,i\in[1,n]$(表示从前$i$个里选$1$个,所求值为$0$)。

  则不难想到状态转移方程:$f[i][j]=Min(f[i][j],f[i-1][p]+abs(a[j].w-a[p].w)),i\in[2,n-k],j\in[i,n],p\in[1,j)$,表示前$j$个里选了$i$个的最小值,由前$p$个中选$i-1$个加上当前搭配的值更新,取值范围就是一些细节问题不多赘述了。

  那么最后输出目标状态$f[n-k][i],i\in[n-k,n]$中的最小值就$OK$了。

代码:

#include<bits/stdc++.h>
#define Min(a,b) ((a)>(b)?(b):(a))
#define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
using namespace std;
const int N=205;
int n,k,f[N][N],ans=520520520;
struct node{int h,w;bool operator<(const node a)const{return h<a.h;}
}a[N];
int main(){ios::sync_with_stdio(0);memset(f,0x3f,sizeof(f));cin>>n>>k;For(i,1,n) cin>>a[i].h>>a[i].w;sort(a+1,a+n+1);f[0][0]=0;For(i,1,n)f[1][i]=0;For(i,2,n-k) For(j,i,n) For(p,1,j-1)f[i][j]=Min(f[i][j],f[i-1][p]+abs(a[j].w-a[p].w));For(i,n-k,n)ans=Min(ans,f[n-k][i]);cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/five20/p/9016703.html

P1103 书本整理相关推荐

  1. Java实现 洛谷 P1103 书本整理

    题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由于很多书的宽度不同,所 ...

  2. 最值得收藏的 数据结构 全部知识点思维导图整理(王道考研), 附带经典题型整理

    本文的思维导图根据王道的数据结构书本整理而来并标记出重点内容,包括了知识点和部分课后习题 思维导图源文件已经发布在我的资源当中, 点击获取全部导图和配套OneNote笔记, 有需要的可以去 我的主页 ...

  3. 洛谷--橙色百道DP总结

    最近刷完了洛谷橙色DP大约一百道,算是发现了一些套路,就部分题目做一些总结. 大概分为三类 第一类,九大背包及其衍生 第二类,经典DP模型,如LCS,LIS等 第三类,实际问题背景的普通,环形,树上D ...

  4. 番外一 感谢我曾经来过2

    番外一 感谢我曾经来过2 那段时间我的举动一反常态,说不上为什么,反正大概就是爱哭敏感易怒之类的. 偶尔我也会向父母诉诉苦,他们看在眼里疼在心里,后来拖着关系和班主任联系,让她多多照顾我.     有 ...

  5. Python回顾与整理12:执行环境

    作为<Python核心编程>核心部分的最后一章,这篇的内容也相当重要.对于高级部分的整理,将采用<Python核心编程>第三版,但是,方式会以之前的完全不一样了. 1.可调用对 ...

  6. Android热修复原理,已整理成文档

    一. 开发背景 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样. 1.知道它是什么.有什么用 相信很多人在学习的时候,一开始都会在网上找一整套资 ...

  7. SQL Server 数据库的整理优化的基本过程(二)

    SQL Server 数据库的整理优化的基本过程(二) 高建刚 第一节 基本维护 第二节 索引 索引相信大家都不陌生,而且在因特网上,有了很多关于如何通过索引来优化数据库的文章,在这里,我主要是结合我 ...

  8. 产品经理如何让问题迎刃而解|PMCAFF工具圈第12期分享整理

    分享主题:让问题迎刃而解-产品经理解决问题的办法 分享时间:12月10日(周四)20:00 分享方式:文字|语音 分享嘉宾:陈清国(合伙人) [关于嘉宾] 陈清国 帅游科技合伙人 10年互联网经验,6 ...

  9. 信号与系统奥本海姆第二版_【中山大学电通信通信号与系统考研】自编的两张小卡片带大家整理一下《奥本海姆·信号与系统》的知识架构...

    建议有时间的同学看看以下的视频,讲解的比文章详细些. [中山大学信号与系统考研]<奥本海姆·信号与系统>教材读不下去?抓不住重点?自编的两张小卡片带大家整理一下知识架构.考研的,本科学习的 ...

最新文章

  1. imrot matlab,Matlabtuxiangpipei
  2. Mysql学习笔记【原创】
  3. hasattr判断是不是可迭代类型的方法
  4. tensorlfow.saved_model的使用
  5. 解决网页中不能复制文字的问题
  6. 动手学PaddlePaddle(5):迁移学习
  7. 智能机器人建房子后房价走势_深圳建二手房价引导制度,学习长沙意图明显,距离稳准狠差点意思...
  8. 在退出作用域时做一些事
  9. DSP28335学习记录(一)
  10. 乔布斯一生中的3次阴差阳错、柳暗花明
  11. 统计分析 -- t分布
  12. OpenCV50:使用SVM完成OCR手写体识别
  13. PSD文件太大?高效压缩插件!
  14. Python库积累之Selenium(一)-Seleniun基础
  15. 微服务探索:nuoyi
  16. 无主之地3重型武器节奏评分榜(9.25) 枪械名 红字效果 元素属性 清图评分 Boss战评分 泛用性评分 特殊性评分 最终评级 掉落点 掉率 图片 瘟疫传播
  17. 获取用户微信头像 高清大图
  18. Tensorflow中scope命名方法
  19. 68 iso14443读卡入门记录
  20. python中如何移动图形工作站_六招教你用Python分分钟构建好玩的深度学习应用

热门文章

  1. 4.3 Siamese 网络
  2. tesseract库
  3. Python Windows安装
  4. scipy.stats.norm
  5. 如何查html病毒svchost.exe,小编教你在Win7系统中检查svchost.exe进程是否为病毒的方法步骤...
  6. 团队梯队人才培养模型,60页人才梯队建设与人才培养,果断收藏
  7. 在 ESXi 上配置 syslog (2003322)
  8. 滴普科技,全场景数据智能服务商
  9. Java基础学习总结(73)——Java最新面试题汇总
  10. Hadoop学习总结(1)——大数据以及Hadoop相关概念介绍