洛谷 P1103 书本整理(动规)

洛谷 P1103 书本整理

题目描述

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 11 22 43 15 3

输出样例#1:
3

题解:

f[i][j]: 在考虑前i个时拿走j本且i必保留时的最优解

 

状态转移方程

 

f[i][j]=f[l=(i-j-1 to i-1)][j-(i-l-1)]+|a[i]-a[l]|

 

前i个时拿走j本且i必保留时的最优解,他当然可以是在

前l个中拿一些书并把l到i间的书全拿走造成的;

 

即,前i个时拿走j本且i必保留时的最优解,为前l(找出这个l)

个时拿走j-(i-l-1)本且l必保留时的最优解,加i与l的差;

 

然后在合适的区间内(i-j-1 to i-1)循环l使之最优;

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<cstdio>
 6 using namespace std;
 7 struct bo{
 8     int a,b;
 9 }s[105];
10 int comp(const bo& x,const bo& y)
11 {
12     if(x.a<y.a)
13         return 1;
14     return 0;
15     }
16 int n,k,f[105][105],a[105][105],minn=1000000;
17 int main(){
18         cin>>n>>k;
19         for(int i=1;i<=n;i++)
20             cin>>s[i].a>>s[i].b;
21         sort(s+1,s+1+n,comp);
22
23         for(int i=1;i<=n;i++)
24                 f[i][1]=0;
25         for(int i=1;i<=n;i++)
26             for(int j=2;j<=min(i,n-k);j++)
27             {f[i][j]=100000000;
28
29                 for(int x=j-1;x<=i-1;x++)
30                 {
31                     f[i][j]=min(f[i][j],f[x][j-1]+abs(s[i].b-s[x].b));
32                     }}
33                     for(int i=n-k;i<=n;i++)
34                     {minn=min(minn,f[i][n-k]);
35                     }
36                     cout<<minn;
37         }
时间: 2024-12-14 10:07:22

洛谷 P1103 书本整理(动规)的相关文章

动态规划 洛谷P1103 书本整理

P1103 书本整理 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由于很多书的宽度不同,所以书看起来还是非常不整齐.于是他决定从中拿掉k本书,使得书架可以看起来整齐一点. 书架的不整齐度是这样定义的:每两本书宽度的差的绝对值的和.例如有4本书: 1x2 5x3 2x4 3x1 那么Frank将其排列整齐后是: 1x2 2x4 3x1 5x3 不整齐度就是2+3+2=

洛谷P1103 书本整理

题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的 书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由于很多书的宽度不同,所以书看起来还是非常不整齐.于是他决定从中拿掉k本 书,使得书架可以看起来整齐一点. 书架的不整齐度是这样定义的:每两本书宽度的差的绝对值的和.例如有4本书: 1x2 5x3 2x4 3x1 那么Frank将其排列整齐后是: 1x2 2x4 3x1 5x3 不整齐度就是2+3+2=7 已知每本书的高

洛谷——P1103 书本整理

https://www.luogu.org/problem/show?pid=1103 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由于很多书的宽度不同,所以书看起来还是非常不整齐.于是他决定从中拿掉k本书,使得书架可以看起来整齐一点. 书架的不整齐度是这样定义的:每两本书宽度的差的绝对值的和.例如有4本书: 1x2 5x3 2x4 3x1 那么Frank将其排列整

洛谷1103 书本整理

洛谷1103 书本整理 本题地址:http://www.luogu.org/problem/show?pid=1103 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架 上.但是Frank发现,由于很多书的宽度不同,所以书看起来还是非常不整齐.于是他决定从中拿掉k本书,使得书架可以看起来整齐一点. 书架的不整齐度是这样定义的:每两本书宽度的差的绝对值的和.例如有4本书: 1x2 5x3 2x4

P1103 书本整理

P1103 书本整理 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由于很多书的宽度不同,所以书看起来还是非常不整齐.于是他决定从中拿掉k本书,使得书架可以看起来整齐一点. 书架的不整齐度是这样定义的:每两本书宽度的差的绝对值的和.例如有4本书: 1x2 5x3 2x4 3x1 那么Frank将其排列整齐后是: 1x2 2x4 3x1 5x3 不整齐度就是2+3+2=

洛谷_递归整理

P1427  小鱼的数字游戏 题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题. 输入输出格式 输入格式: 一行内输入一串整数,以0结束,以空格间隔. 输出格式: 一行内倒着输出这一串整数,以空格间隔. 输入输出样例 输入样例#1:

【Luogu】P1103 书本整理の心得

传送门qwq 卡了好长时间,结果发现是一道普及的题,啪啪啪啪啪..... 虽然dp方程不难想,但是思路还是很重要的,**转化题意**是最重要的一步,例如,抽调k本书,可以转化为在n本书里选择n-k本书,而不是去写sb的3维区间dp,而且根本不可写23333,另外,dp得到的dp[n][n-k]不一定就是答案,要注意到,并不一定最后一本选的书是第n本,所以一定要把dp数组扫一下,再得出最优解!! dp[i][j]表示在最后一本书为i时,一共选了j本书的最小值. dp[i][j]=min(dp[i]

Luogu P1103 书本整理

题目链接 题目大意:有n个二元组,先按第一关键字排序,定义价值为每相邻两个元素第二关键字差的绝对值和.现在去掉k个二元组,请你求出最小的价值. 第一关键字至于排序有关,排完序后完全可以不要. 与其考虑去掉k个二元组,不如保留n-k个二元组. 设f[i][j]为前i个二元组保留j个的最小代价(必须含i),则前i-1个二元组中保留j-1个,枚举转移点t,得到状态转移方程: f[i][j]=min{f[t][j-1]}(j-1≤t<i) 初始化:f[i][1]=0 答案min{f[i][k]}(k≤i

洛谷 P1854 花店橱窗布置

题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识.如果I < J,则花束I必须放在花束J左边的花瓶中.例如,假设杜鹃花的标识数为1,秋海棠的标识数为2,康乃馨的标识数为3,所有花束在放入花瓶时必须保持其标识数的顺序,即杜鹃花必须放在秋海棠左边的花瓶中,秋海棠必须放在康乃馨左边的花瓶中.如果花瓶的数目大于花束的数目,则多余的花瓶必须空,即每个花瓶只