• ECNUOJ 2615 会议安排


    会议安排

    Time Limit:1000MS Memory Limit:65536KB
    Total Submit:451 Accepted:102

    Description

    科研人员与相关领域的国内外同行进行适时的接触与充分的交流,对于促进提高他们的科研业务水平,并及时掌握科研动态是十分必要而且重要的。ECNU为了走在科技的前沿,于是决定派遣一些学者出去参加会议。由于这些会议具有不同的级别,因此对于科研人员可能带来的科研上的促进作用也就可能不同。但是一个学者不能同时参加两个会议。而且,如果一个学者需要连续参加两个会议,第二个会议的开始时间要晚于第一个会议的结束时间..
    现在给出一些会议的起始时间和终止时间,并给出这些会议对应的促进值,请你计算出一个学者能够得到的最大的促进值。

    Input

    第一行为一个整数T,表示测数数据的组数.
    每组数据第一行为整数n(1<=n<=300),代表有n个会议,然后有n行数据,每行给出3个整数s(会议开始时间),t(会议终止时间),w(会议相对应的促进作用).(0<=s<=t<=365,0<w<100)

    Output

    输出能够得到的最大的促进作用。
    每组测试数据输出占一行。

    Sample Input

    2
    3
    2 5 5
    4 6 4
    6 7 10
    3
    1 2 3
    2 4 10
    3 10 2

    Sample Output

    15
    10

    Source

    华东师范大学2009校赛

    解题:直接dp好啦,dp[j]表示在j时间内,能够获得最大的促进作用是多少,然后类似于01背包,一顿瞎搞

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 1000;
     4 int dp[maxn];
     5 struct node{
     6     int s,t,w;
     7     bool operator<(const node &o) const{
     8         return t < o.t;
     9     }
    10 }m[maxn];
    11 int main(){
    12     int kase,n;
    13     scanf("%d",&kase);
    14     while(kase--){
    15         scanf("%d",&n);
    16         for(int i = 0; i < n; ++i){
    17             scanf("%d %d %d",&m[i].s,&m[i].t,&m[i].w);
    18         }
    19         sort(m,m+n);
    20         memset(dp,0,sizeof dp);
    21         for(int i = 0; i < n; ++i){
    22             for(int j = m[n-1].t; j >= 0; --j){
    23                 if(j >= m[i].t) dp[j] = max(dp[j],dp[m[i].s - 1] + m[i].w);
    24             }
    25         }
    26         cout<<dp[m[n-1].t]<<endl;
    27     }
    28     return 0;
    29 }
    View Code
  • 相关阅读:
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4627236.html
Copyright © 2020-2023  润新知