【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][j],dp[x][j-1])

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

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

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

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

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

附上代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<math.h>
using namespace std;
struct nod{
    int h;
    int w;
};
nod b[105];
int dp[105][105];
inline int cmp(nod a,nod b){
    return a.h<b.h;
}
int main(){
    int n,k;
    cin>>n>>k;
    for(register int i=1;i<=n;i++){
        cin>>b[i].h>>b[i].w;
    }
    sort(b+1,b+n+1,cmp);
    for(register int i=0;i<=n;i++){
        for(register int j=0;j<=n;j++){
            dp[i][j]=99999999;
        }
        dp[i][0]=0;
        dp[i][1]=0;
    }
    for(register int x=2;x<=n-k;x++){
        for(register int i=1;i<=n;i++){
            if(i<x)continue;
            for(register int j=i-1;j>=x-1;j--){
                dp[i][x]=min(dp[j][x-1]+(int)fabs(b[i].w-b[j].w),dp[i][x]);
                //cout<<dp[j][x-1]<<‘ ‘<<(int)fabs(b[i].w-b[j].w)<<‘ ‘<<dp[i][x]<<endl;
                //cout<<i<<‘ ‘<<j<<‘ ‘<<x<<endl<<endl;
            }
        }
    }
    int ans=99999999;
    for(int i=n-k;i<=n;i++){
        ans=min(ans,dp[i][n-k]);
    }
    cout<<ans<<endl;
}

原文地址:https://www.cnblogs.com/Fang-Hao/p/8460590.html

时间: 2024-10-13 21:01:06

【Luogu】P1103 书本整理の心得的相关文章

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

P1103 书本整理

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

动态规划 洛谷P1103 书本整理

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

洛谷 P1103 书本整理(动规)

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

洛谷——P1103 书本整理

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

洛谷P1103 书本整理

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

洛谷1103 书本整理

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

U盘/网盘/移动硬盘中文件、资源的整理心得

当移动硬盘或者在线网盘里,文件.图片.软件.媒体等各种资源越来越多时,存放和使用它们如何能够变得更有效呢? 今天和大家分享一下我的文档/文件夹整理规则和心得,我的整理规则如要有以下几点: 关注当前 减少复杂分类,分类维度要统一 善用搜索 结束语:这样做有必要吗? 下面我以我的Dropbox中的文件同步为例,介绍一下这些规则: 一.关注当前 当前关注或者正在使用的文件,直接放到Dropbox的同步根目录. 我会当前关注或者正在使用的文件,直接放到同步网盘或者移动存储设备的根目录.这样的好处是 :

20180610模拟赛T3——书本整理

[问题描述] 小明的书架上放了许多书,为了使书架变得整洁,小明决定整理书架,他将所有书按高度大小排列,这样排了之后虽然整齐了许多,但小明发现,书本的宽度不同,导致书架看上去还是有些凌乱.小明把这个凌乱值定义为相邻两本书的宽度差的绝对值的和. 例如有4本书: 1×2 5×3 2×4 3×1 那么小明将其排列整齐后的顺序是: 1×2 2×4 3×1 5×3 凌乱值就是2+3+2=7. 于是小明决定拿掉其中的k本书,使凌乱值最小,你能帮他求出这个最小值吗?已知每本书的高度都不一样. [问题输入] 第一