zoukankan      html  css  js  c++  java
  • [wikioi]线段覆盖 2

    http://wikioi.com/problem/3027/

    # 有个小错误调了半天,最终发现sort(line, line+N)错了,后面那个是exclusive的,所以要line+N+1。
    # 按照右端点从小到大排序。原因是循环结构中是i从1到n, i比较小的时候尽可能选右端点比较小的,这样才可以为后面的线段留下更大的空间。
    # f[i]表示:算前i条线段时,选上第i条线段,能获得的最大价值。f[i]=max{f[j]}+c[i] (if 不重合)

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <memory.h>
    #define MAX(a, b) a>b?a:b
    #define LEN 1005
    using namespace std;
    
    struct Line
    {
        int left;
        int right;
        int value;
    };
    
    int N;
    Line line[LEN];
    int F[LEN];
    
    bool comp(Line a, Line b)
    {
        return a.right < b.right;
    }
    
    void init()     
    {
        memset(F, 0, sizeof(F));
        memset(line, 0, sizeof(line));
        scanf("%d", &N);
        for (int i = 1; i <= N; i++) {
            scanf("%d%d%d", &line[i].left, &line[i].right, &line[i].value);
        }
        
    }     
    
    int main()
    {
        init();
        sort(line, line+N, comp);
        int ans = 0;
        for (int i = 1; i <= N; i++)
        {
            F[i] = line[i].value;
            for (int j = 1; j < i; j++)
            {
                if (line[j].right <= line[i].left)
                {
                    F[i] = MAX(F[j] + line[i].value, F[i]);
                }
            }
            ans = MAX(F[i], ans);
        }
        
        printf("%d
    ", ans);
        return 0;
    }
    

      

  • 相关阅读:
    方法
    成员变量和局部变量
    带参数的方法
    包名规范
    String
    导包
    java基础(十二章)
    java基础(十一章)
    java基础(九章)
    java基础(八章)
  • 原文地址:https://www.cnblogs.com/lautsie/p/3381350.html
Copyright © 2011-2022 走看看