zoukankan      html  css  js  c++  java
  • 【基础练习】【线性DP】codevs3027 线段覆盖2题解

    文章被盗还是非常严重,加版权信息

    转载请注明出处 [ametake版权全部]http://blog.csdn.net/ametake欢迎来看看


    这道题目是线性动归 可是思想和背包有些类似 事实上线性动归非常多思想都是背包类似 所以还是依照线性动归分类

    果然写了2就不想再写1的DP版本号了= =

    题目描写叙述 Description

    数轴上有n条线段,线段的两端都是整数坐标。坐标范围在0~1000000,每条线段有一个价值。请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点能够重合)且线段价值之和最大。

    n<=1000

    输入描写叙述 Input Description

    第一行一个整数n,表示有多少条线段。

    接下来n行每行三个整数, ai bi ci,分别代表第i条线段的左端点ai。右端点bi(保证左端点<右端点)和价值ci。

    输出描写叙述 Output Description

    输出可以获得的最大价值

    例子输入 Sample Input

    3

    1 2 1

    2 3 2

    1 3 4

    例子输出 Sample Output

    4

    数据范围及提示 Data Size & Hint

    数据范围

    对于40%的数据。n10

    对于100%的数据,n1000

    0<=ai,bi<=1000000

    0<=ci<=1000000

    题目如上

    思想是用结构体存储左右端点和值 f[i]表示的是选第i条线段所能有的最大值 方程f[i]=max{f[j]}+a[i].c 当中0<j<i且a[j].r<=a[i].l 即除端点外两线段不重叠 最后扫一遍 

    注意 f[i]表示的是选第i条线段所能有的最大值 并非前i条线段 私以为假设表示前i条的话可能还要多一维 但没想到非常好的方法 codevs题解区好像有人用前i条做的 能够看一下

    一次性A真高兴

    上代码 


    ——不敢高声语,恐惊天上人。



  • 相关阅读:
    POJ 2987:Firing(最大权闭合图)
    BZOJ 1001:[BeiJing2006]狼抓兔子(最小割)
    HDU 1007:Quoit Design(分治求最近点对)
    POJ 1986:Distance Queries(倍增求LCA)
    HDU 3879 && BZOJ 1497:Base Station && 最大获利 (最大权闭合图)
    BZOJ-1011 遥远的行星
    BZOJ-1044 木棍分割
    BZOJ-1042 硬币购物
    BZOJ-1050 旅行
    BZOJ-1037 生日聚会
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7213694.html
Copyright © 2011-2022 走看看