zoukankan      html  css  js  c++  java
  • codevs 3027线段覆盖2

    传送门

    3027 线段覆盖 2

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     
    题目描述 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%的数据,n≤10;

    对于100%的数据,n≤1000;

    0<=ai,bi<=1000000

    0<=ci<=1000000

     【题目大意】求线段两两不覆盖且总价值和最大

    【思路】dp

    【code】

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    struct E
    {
        int x,y,v;
    }s[1002];
    int n,ans,f[1002];
    bool cmp(E a,E b)
    {
        return a.y<b.y;
     } 
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].v);
        sort(s+1,s+n+1,cmp);
        for(int i=1;i<=n;i++)
        for(int j=0;j<i;j++)
        if(s[i].x>=s[j].y)
        f[i]=max(f[j]+s[i].v,f[i]);
        for(int i=1;i<=n;i++)
        ans=max(ans,f[i]);
        printf("%d
    ",ans);
    }
  • 相关阅读:
    第03组 Alpha冲刺(2/4)
    第03组 Alpha冲刺
    第09组 Beta版本演示
    第09组 Beta冲刺(4/4)
    第09组 Beta冲刺(3/4)
    第09组 Beta冲刺(2/4)
    第09组 Beta冲刺(1/4)
    第09组 Alpha事后诸葛亮
    第09组 Alpha冲刺(4/4)
    第09组 Alpha冲刺(3/4)
  • 原文地址:https://www.cnblogs.com/zzyh/p/7061101.html
Copyright © 2011-2022 走看看