【SSLGZ 2081】书本整理
来源:互联网 发布:淘宝拍照用什么相机好 编辑:程序博客网 时间:2024/04/27 13:34
问题描述
小明的书架上放了许多书,为了使书架变得整洁,小明决定整理书架,他将所有书按高度大小排列,这样排了之后虽然整齐了许多,但小明发现,书本的宽度不同,导致书架看上去还是有些凌乱。小明把这个凌乱值定义为相邻两本书的宽度差的绝对值的和。
例如有4本书:
1x2
5x3
2x4
3x1
那么小明将其排列整齐后的顺序是:
1x2
2x4
3x1
5x3
凌乱值就是2+3+2=7
于是小明决定拿掉其中的k本书,使凌乱值最小,你能帮他求出这个最小值吗?
已知每本书的高度都不一样。
样例输入
4 1 //高、宽
1 2
5 3
2 4
3 1
样例输出
3
算法讨论
本题使用动态规划,定义f[i,j]为前i本书只放j本的凌乱值,则:
f[i,j]:=min{f[i,j],f[l,j-1]+abs(a[l,2]-a[i,2])} j-1<=l<=i-1
const maxn=101;var a:array[1..maxn,1..2] of longint; f:array[1..maxn,1..maxn] of longint; i,j,l,n,k,t,m:longint;function min(x,y:longint):longint;begin if x<y then exit(x) else exit(y)end;begin read(n,k); for i:=1 to n do read(a[i,1],a[i,2]); for i:=1 to n-1 do for j:=i+1 to n do if a[i,1]>a[j,1] then begin t:=a[i,1]; a[i,1]:=a[j,1]; a[j,1]:=t; t:=a[i,2]; a[i,2]:=a[j,2]; a[j,2]:=t end; for i:=2 to n do for j:=2 to n-k do f[i,j]:=maxlongint; for i:=2 to n do for j:=2 to n-k do begin if j>i then break; for l:=j-1 to i-1 do f[i,j]:=min(f[i,j],f[l,j-1]+abs(a[l,2]-a[i,2])) end; m:=maxlongint; for i:=n-k to n do m:=min(m,f[i,n-k]); write(m)end.
Pixiv ID:58663595
0 0
- 【SSLGZ 2081】书本整理
- 书本整理
- 书本整理
- 书本整理
- 书本整理
- 洛谷1103 书本整理
- luogu1103书本整理
- 洛谷P1103 书本整理
- 洛谷 P1103 书本整理
- 洛谷 P1103 书本整理
- SSL2081 书本整理(dp)
- 动态规划---书本整理
- P1103 书本整理 【dp】
- 书本整理 洛谷p1103
- P1103 书本整理(洛谷)
- 【动态规划】【RQ225】【JSOI2007】书本整理
- rqnoj-225-书本整理-逆向思维dp
- 动态规划 洛谷P1103 书本整理
- 前端训练营第一天笔记
- 前端学习笔记
- VS2017配置opencv3.2在MFC单文档中显示图片
- 架构之路--volatile关键字和线程通信
- Python center 用法
- 【SSLGZ 2081】书本整理
- 排序算法---快速排序
- 搜索树操作集
- 用纯js编写斑马条纹
- npm 常用命令行
- 如何防止蚊子叮咬(专为宝贝)
- POJ 1113 Wall (凸包+求周长)
- 三种输出方式的效率对比
- 集合问题