[BZOJ1672][Usaco2005 Dec]Cleaning Shifts 清理牛棚

1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚

Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 953  Solved: 407 [Submit][Status][Discuss]

Description

Farmer John's cows, pampered since birth, have reached new heights of fastidiousness. They now require their barn to be immaculate. Farmer John, the most obliging of farmers, has no choice but hire some of the cows to clean the barn. Farmer John has N (1 <= N <= 10,000) cows who are willing to do some cleaning. Because dust falls continuously, the cows require that the farm be continuously cleaned during the workday, which runs from second number M to second number E during the day (0 <= M <= E <= 86,399). Note that the total number of seconds during which cleaning is to take place is E-M+1. During any given second M..E, at least one cow must be cleaning. Each cow has submitted a job application indicating her willingness to work during a certain interval T1..T2 (where M <= T1 <= T2 <= E) for a certain salary of S (where 0 <= S <= 500,000). Note that a cow who indicated the interval 10..20 would work for 11 seconds, not 10. Farmer John must either accept or reject each individual application; he may NOT ask a cow to work only a fraction of the time it indicated and receive a corresponding fraction of the salary. Find a schedule in which every second of the workday is covered by at least one cow and which minimizes the total salary that goes to the cows.

    约翰的奶牛们从小娇生惯养,她们无法容忍牛棚里的任何脏东西.约翰发现,如果要使这群有洁癖的奶牛满意,他不得不雇佣她们中的一些来清扫牛棚, 约翰的奶牛中有N(1≤N≤10000)头愿意通过清扫牛棚来挣一些零花钱.由于在某个时段中奶牛们会在牛棚里随时随地地乱扔垃圾,自然地,她们要求在这段时间里,无论什么时候至少要有一头奶牛正在打扫.需要打扫的时段从某一天的第M秒开始,到第E秒结束f0≤M≤E≤86399).注意这里的秒是指时间段而不是时间点,也就是说,每天需要打扫的总时间是E-M+I秒. 约翰已经从每头牛那里得到了她们愿意接受的工作计划:对于某一头牛,她每天都愿意在笫Ti,.T2秒的时间段内工作(M≤Ti≤马≤E),所要求的报酬是S美元(0≤S≤500000).与需打扫时段的描述一样,如果一头奶牛愿意工作的时段是每天的第10_20秒,那她总共工作的时间是11秒,而不是10秒.约翰一旦决定雇佣某一头奶牛,就必须付给她全额的工资,而不能只让她工作一段时间,然后再按这段时间在她愿意工作的总时间中所占的百分比来决定她的工资.现在请你帮约翰决定该雇佣哪些奶牛以保持牛棚的清洁,当然,在能让奶牛们满意的前提下,约翰希望使总花费尽量小.

Input

* Line 1: Three space-separated integers: N, M, and E. * Lines 2..N+1: Line i+1 describes cow i's schedule with three space-separated integers: T1, T2, and S.

    第1行:3个正整数N,M,E,用空格隔开.
    第2到N+1行:第i+l行给出了编号为i的奶牛的工作计划,即3个用空格隔开的正整数Ti,T2,S.

Output

* Line 1: a single integer that is either the minimum total salary to get the barn cleaned or else -1 if it is impossible to clean the barn.

    输出一个整数,表示约翰需要为牛棚清理工作支付的最少费用.如果清理工作不可能完成,
那么输出-1.

Sample Input

3 0 4  //三头牛,要打扫从0到4号stall
0 2 3  //一号牛,从0号stall打扫到2号,工资为3
3 4 2
0 0 1

INPUT DETAILS:

FJ has three cows, and the barn needs to be cleaned from second 0 to second
4. The first cow is willing to work during seconds 0, 1, and 2 for a total
salary of 3, etc.

Sample Output

5
 
把所有牛按照左端点排序

$f[i]$表示到$i$时刻的最小代价

对于一只$l-r$费用$c$的牛,可以用$f[i-1]+c$更新$l-r$

一定记得开long long啊啊啊啊

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; 
char buf[10000000], *ptr = buf - 1;
inline int readint(){
    int n = 0;
    char ch = *++ptr;
    while(ch < '0' || ch > '9') ch = *++ptr;
    while(ch <= '9' && ch >= '0'){
        n = (n << 1) + (n << 3) + ch - '0';
        ch = *++ptr; 
    }
    return n;
}
typedef long long ll;
const int maxn = 10000 + 10;
const ll INF = 1ll << 60;
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
ll Min[400000 + 10], tag[400000 + 10];
inline void PushUp(int rt){
    Min[rt] = min(Min[rt << 1], Min[rt << 1 | 1]);
}
void Build(int l, int r, int rt){
    Min[rt] = tag[rt] = INF;
    if(l == r) return;
    else{
        int mid = l + r >> 1;
        Build(lson);
        Build(rson);
    }
}
inline void PushDown(int rt){
    if(tag[rt] != INF){
        tag[rt << 1] = min(tag[rt << 1], tag[rt]);
        tag[rt << 1 | 1] = min(tag[rt << 1 | 1], tag[rt]);
        Min[rt << 1] = min(Min[rt << 1], tag[rt]);
        Min[rt << 1 | 1] = min(Min[rt << 1 | 1], tag[rt]);
        tag[rt] = INF;
    }
}
ll Query(int qw, int l, int r, int rt){
    if(l == r) return Min[rt];
    else{
        PushDown(rt);
        int mid = l + r >> 1;
        if(qw <= mid) return Query(qw, lson);
        else return Query(qw, rson);
    }
}
void Update(int ql, int qr, ll qv, int l, int r, int rt){
    if(ql <= l && r <= qr){
        Min[rt] = min(Min[rt], qv);
        tag[rt] = min(tag[rt], qv);
    }
    else{
        PushDown(rt);
        int mid = l + r >> 1;
        if(ql <= mid) Update(ql, qr, qv, lson);
        if(qr > mid) Update(ql, qr, qv, rson);
        PushUp(rt);
    }
}
struct Node{
    int st, et, s;
    Node(){}
    bool operator < (const Node &x) const {
        return st < x.st;
    }
}a[maxn];
int main(){
    fread(buf, sizeof(char), sizeof(buf), stdin);
    int N, M, E;
    N = readint();
    M = readint();
    E = readint();
    for(int i = 1; i <= N; i++){
        a[i].st = readint();
        a[i].et = readint();
        a[i].s = readint();
    }
    Build(M, E, 1);
    sort(a + 1, a + N + 1);
    ll t;
    for(int i = 1; i <= N; i++){
        if(a[i].et < M) continue;
        if(a[i].st <= M) t = 0;
        else t = Query(a[i].st - 1, M, E, 1);
        if(t == INF){
            puts("-1");
            return 0;
        }
        else Update(a[i].st, a[i].et, t + a[i].s, M, E, 1);
    }
    ll ans = Query(E, M, E, 1);
    if(ans == INF) puts("-1");
    else printf("%lld\n", ans);
    return 0;
}

 

 

转载于:https://www.cnblogs.com/ruoruoruo/p/7553948.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值