【动态规划】书本整理 book.pas/c/cpp
来源:互联网 发布:mac ps转化为智能对象 编辑:程序博客网 时间:2024/06/10 21:01
书本整理(BOOK)
Problem: book.pas/c/cpp
Input: book.in
Output: book.out
Memory Limit: 256 MB
Time Limit: 1 sec
【问题描述】
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。
【输出数据】
一行一个整数,表示书架的最小不整齐度。
【样例】
book.in
4 1
1 2
2 4
3 1
5 3
book.out
3
这一题正着想去去掉几个可能不是怎么好想,所以我们用一下逆向思维
用f[i][j]表示前 i 个数中,留下 j 个数,并且必须留下第 i 个数的最优值
所以 f[i][j]=max{ f[k][j-1]+abs(a[k]-a[i]) }
最后不能直接输出f[n][n-m]!!因为我们定义的是前 i 个数中取 j 个,那么i-1个也可能,i-2个也有可能,所以要在 f[1..n][n-m]中取最优值
C++ Code
/*C++ Codehttp://blog.csdn.net/jiangzh7By jiangzh*/#include<cstdio>#include<algorithm>using namespace std;#define MAXN 110#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b))int n,m;struct node{int x,y;}a[MAXN];int f[MAXN][MAXN];//f[i][j]表示前 i 个 留下 j 个 ,并且第 i 个必须留的最优值bool cmp(node a,node b){ if(a.x==b.x) return a.y<b.y; return a.x<b.x;}int main(){ freopen("book.in","r",stdin); freopen("book.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y); sort(a+1,a+1+n,cmp); memset(f,0x07,sizeof(f)); for(int i=1;i<=n;i++) f[i][0]=f[i][1]=0; for(int j=1;j<=n-m;j++) for(int i=1;i<=n;i++) for(int k=1;k<i;k++) f[i][j]=min(f[i][j],f[k][j-1]+abs(a[k].y-a[i].y)); int ans=f[n][n-m]; for(int i=1;i<=n;i++) ans=min(ans,f[i][n-m]); printf("%d",ans); return 0;}
- 【动态规划】书本整理 book.pas/c/cpp
- 动态规划---书本整理
- 1、淘汰赛制(elimination.pas/c/cpp) 动态规划
- 【动态规划】【排列组合】Wiseking (Wiseking.pas/c/cpp)
- 【动态规划】新型计算机 computer.pas/c/cpp
- 【动态规划】无聊的数列 line.pas/c/cpp
- 【动态规划 变形】天堂 heaven.pas/c/cpp
- 【动态规划】【RQ225】【JSOI2007】书本整理
- 动态规划 洛谷P1103 书本整理
- 【动态规划】【单调队列】最大子序列的和 (max.c/cpp/pas)
- 【递推】【动态规划】【数列】第二题 覆盖墙壁(wall.pas/c/cpp)
- 【动态规划】第四题 分配小组(poset.pas/c/cpp)
- 【动态规划】Tom的烦恼 tom.pas/c/cpp/in/out
- 【动态规划】贝茜的晨练计划 cowrun.pas/c/cpp
- mm.cpp/c/pas
- set.cpp/c/pas
- 火星人(martian.pas/c/cpp)
- 飙车[nfs.pas/c/cpp]
- 、写出xml schema与xml dtd文件相比较的优点。 2、完成一个xml schema文件定义,定义一个根元素水果,水果标签中包含苹果、梨、西瓜三个元素,三个元素均为字符类型。
- 【动态规划 变形】天堂 heaven.pas/c/cpp
- 大神写的高精度模板 C/C++
- 【队列模拟】11月15日的快乐 happy.pas/c/cpp
- 【最小环】心灵的抚慰 heart.pas/c/cpp
- 【动态规划】书本整理 book.pas/c/cpp
- [总结] 阶段性总结 10.18~11.09集训生活
- [NOIP注意]NOIP前必须记住的30句话
- [NOIP]自己收集总结的NOIP考纲
- 【贪心+堆优化】奶牛晒衣服 dry.pas/c/cpp
- 【枚举+优化】【队列操作】【RMQ】奶牛派对 tahort.pas/c/cpp
- 【对中点】圆圈舞蹈 circle.pas/c/cpp
- 【模拟】【栈】外星密码 password.pas/c/cpp
- 【最短路】逃离遗迹 escape.pas/c/cpp