zoukankan      html  css  js  c++  java
  • 洛谷 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         }
     
  • 相关阅读:
    STM32F2系列系统时钟默认配置
    在电源上叠加一个脉冲信号,模拟一个干扰信号
    const用法
    指向指针的指针
    Judge Route Circle
    汉明距离
    绘制三角形
    OpenGL工作流程
    OpenGL环境搭建
    next()方法 执行下一个中间件 类似than
  • 原文地址:https://www.cnblogs.com/Slager-Z/p/7771407.html
Copyright © 2011-2022 走看看