zoukankan      html  css  js  c++  java
  • 【洛谷 2889】 [USACO07NOV]Milking Time S

    题目描述

    Bessie 可以在接下来 NN 个小时内产奶,为了方便,我们把这 NN 个小时 0dots N-10N1 编号。

    FJ 在这 NN 个小时内有 MM 段时间可以来给 Bessie 挤奶,第 ii 段时间从 Start_iStarti 开始到 End_iEndi 结束,可以得到 Eff_iEffi 加仑牛奶。

    每次 FJ 给 Bessie 挤奶之后,Bessie 都要休息 RR 个小时,FJ 才能开始下一次挤奶。

    现在,FJ 需要您计算出 Bessie 在这 NN 个小时内最多产多少奶。

    输入格式

    第一行有三个整数,分别表示 N,M,RN,M,R。

    第 2dots M+12M+1 行,第 i+1i+1 行有三个整数 Start_i,End_i,Eff_iStarti,Endi,Effi,描述一段挤奶的时间。

    输出格式

    输出一行一个整数表示答案。

    输入输出样例

    输入 #1
    12 4 2
    1 2 8
    10 12 19
    3 6 24
    7 10 31
    输出 #1
    43

    说明/提示

    数据规模与约定

    对于全部的测试点,保证 1le Nle 10^61N106,1le Mle 10^31M103,1le Start_i<end_ile N1Starti<endiN,1le Eff_ile 10^61Effi106。

    题解:可以spfa跑最长路或者dp都可

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<bits/stdc++.h>
    typedef long long ll;
    using namespace std;
    const int N=100005;
    struct node{
        int x,y,z,next;
    }a[N];
    int f[N],head[N],n,m,r,xx,yy,zz;
    int main(){
        freopen("2889.in","r",stdin);
        freopen("2889.out","w",stdout);
        scanf("%d %d %d",&n,&m,&r);
        for(int i=1;i<=m;i++){
            scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].z);
            a[i].next=head[a[i].y];
            head[a[i].y]=i;
        }
        for(int j=1;j<=n;j++){
            f[j]=f[j-1];
            for(int i=head[j];i;i=a[i].next)
                f[j]=max(f[j],f[max(a[i].x-r,0)]+a[i].z);
        }
        cout<<f[n];
        return 0;
    }
  • 相关阅读:
    list count++
    Java程序员常用工具类库
    Java读写Excel之POI超入门
    JS操作JSON总结
    ORACLE RAC 11G 添加以及删除UNDO表空间
    oracle 索引优化之distinct
    Redis常用的命令
    Linux 安装Redis 5.0(以及参数调优)
    OEM12C(12.1.0.5)安装插件监控mysql(linux)
    mysql版本升级
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/13887378.html
Copyright © 2011-2022 走看看