zoukankan      html  css  js  c++  java
  • 配置魔药

    【题目描述】

    现在哈利面前有两个坩埚,有许多种药材要放进坩埚里,但一个坩埚加工时只能加工一种药材,而且不一定每一种药材都要加进坩埚里。加工每种药材都必须在某个起始时间和结束时间之内完成(包括起始时间和结束时间),每种药材都有一个加工后的药效,询问哈利可以得到的最大药效是多少。

    【输入描述】

    第1行输入两个整数,分别表示一节魔药课的时间t(1 ≤ t ≤ 500)和药材数n(1 ≤ n ≤ 100);

    接下来n行,每行输入三个整数,分别表示加工第i种药材的起始时间t1、结束时间t2(1 ≤ t1 ≤ t2 ≤ t)和药效w(1 ≤ w ≤ 100)。

    【输出描述】

    输出一个正整数,表示最大药效。

    【样例输入】

    7 4

    1 2 10

    4 7 20

    1 3 2

    3 7 3

    【样例输出】

    35

    源代码:
    
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    struct Node
    {
        int L,R,S;
    }i[501];
    int n,Time,ans,f[101][501][501];
    bool Rule(Node t1,Node t2)
    {
        if (t1.L==t2.L)
          return t1.R<t2.R;
        return t1.L<t2.L; 
    }
    int main() //双线程序列动态规划。
    {
        scanf("%d%d",&Time,&n);
        for (int a=1;a<=n;a++)
          scanf("%d%d%d",&i[a].L,&i[a].R,&i[a].S);
        sort(i+1,i+n+1,Rule); //尽量按早的排序。
        for (int a=1;a<=n;a++) //前多少个。
          for (int b=0;b<a;b++) //坩埚1最后放的几号药品。
            for (int c=0;c<a;c++) //坩埚2最后放的几号药品。
            {
                f[a][b][c]=f[a-1][b][c]; //因为排过序了,所以没有别的顾虑。
                if (i[a].L>i[b].R) //不冲突,可以更新。
                  f[a][a][c]=max(f[a][a][c],f[a-1][b][c]+i[a].S);
                if (i[a].L>i[c].R) //同理。
                  f[a][b][a]=max(f[a][b][a],f[a-1][b][c]+i[a].S);
                ans=max(ans,max(f[a][b][a],f[a][a][c])); //顺便更新答案。
            }
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    各种锁
    几百兆的sql文件无法编辑
    og4j1.x升级log4j2.x及异步日志开启
    TSNE/分析两个数据的分布
    _tkinter.TclError: no display name and no $DISPLAY environment variable
    split分割文件
    ubuntu+jdk
    进程操作
    ImportError: No module named apex
    Ubuntu 16.04.4安装Anaconda
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5932782.html
Copyright © 2011-2022 走看看