[BZOJ1572] WorkScheduling
本题可以采用贪心
算法一:按工作时间排序,如果工作能按时完成的工作就按时完成,如果工作不能按时完成就把之前价值最小的工作和当前作比较,取最优的情况。考虑使用堆维护工作价值。
算法二:按工作价值排序,因为所有工作花费的是一样的,价值大的尽量完成,考虑把工作拖到最后完成。每个工作从完成期限往前找,找到第一个空的时段,用这个时间完成工作。考虑用并查集快速查找空的时段。如果该工作完成时间>n,则一定可以完成,并查集只要维护<=n的部分。
#include <cstdio>
#include <queue>
#include <algorithm>
#define LL long long
struct Work{int d,p;}W[];
std::priority_queue<LL,std::vector<LL>,std::greater<LL> >Q;
bool cmp(Work A,Work B){return A.d<B.d; }
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,size=;LL ans=;
scanf("%d",&n);
for(int i=;i<=n;++i)
scanf("%d %d",&W[i].d,&W[i].p);
std::sort(W+,W+n+,cmp);
for(int i=;i<=n;++i)
if(size<W[i].d){
ans=ans+W[i].p;
++size;
Q.push(W[i].p);
}else if(Q.top()<W[i].p){
ans=ans-Q.top()+W[i].p;
Q.pop();
Q.push(W[i].p);
}
printf("%lld",ans);
//fclose(stdin);fclose(stdout);
return ;
}
#include <cstdio>
#include <algorithm>
#define LL long long
int Pre[];
struct Work{int d,p;}W[];
bool cmp(Work A,Work B){return A.p>B.p;}
int GetPre(int x){return Pre[x]==x?x:Pre[x]=GetPre(Pre[x]);}
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n;LL ans=;
scanf("%d",&n);
for(int i=;i<=n;++i)
scanf("%d %d",&W[i].d,&W[i].p);
std::sort(W+,W+n+,cmp);
for(int i=;i<=n;++i)Pre[i]=i;
for(int i=,pre;i<=n;++i)
if(W[i].d>n){
ans=ans+W[i].p;
}else{
pre=GetPre(W[i].d);
if(!pre)continue;
ans=ans+W[i].p;
Pre[pre]=pre-;
}
printf("%lld",ans);
//fclose(stdin);fclose(stdout);
return ;
}
[BZOJ1572] WorkScheduling的更多相关文章
- [bzoj1572][Usaco2009 Open]工作安排Job_贪心_堆
工作安排 Job bzoj-1572 Usaco-2009 Open 题目大意:题目链接. 注释:略. 想法: 我们将任务按照截止时间排序,枚举任务的同时顺便记录出已经做了多少任务(当前时间). 对于 ...
- BZOJ1572 工作安排 USACO2009
描述 Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间.他的工作日从0时刻开始,有100000 ...
- BZOJ1572: [Usaco2009 Open]工作安排Job
1572: [Usaco2009 Open]工作安排Job Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 775 Solved: 337[Submit ...
- bzoj1572
题解: 每一次不能满足的时候 找一个之前有过的 然后最小的 和他替换 代码: #include<bits/stdc++.h> using namespace std; ; long lon ...
- 【bzoj1572】[Usaco2009 Open]工作安排Job 贪心+堆
题目描述 Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有1000000000个单位时间(!). ...
- 【贪心】bzoj1572: [Usaco2009 Open]工作安排Job
先是没怎么理解这个贪心……然后贪心又被细节弄挂…… Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. ...
- [BZOJ1572] [Usaco2009 Open]工作安排Job(贪心 + 堆)
传送门 把任务按照d排序 一次加入到堆中,如果当前放不进堆中,并且比堆中最小的大, 就从堆中弹出一个数,再把当前的数放进去 #include <queue> #include <cs ...
- bzoj1572 [Usaco2009 Open]工作安排Job【贪心 堆】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1572 尽管这一题没有看题解,但是耗时还是比本应耗费的时间要长,所以还是写一下,以提升经验 这 ...
- [bzoj1572]工作安排
按照Di排序,从小到大枚举物品,考虑如果直接能选就选上,不能选就考虑替换之前价值最小的来选(显然一定是可行的,只需要在原来选价值最小的时候选这个就行了),这个东西用堆来维护即可 1 #include& ...
随机推荐
- GB/T2659-2000《世界各国和地区名称代码》
代码 代码名称 004 阿富汗 008 阿尔巴尼亚 012 阿尔及利亚 016 美属萨摩亚 020 安道尔 024 安哥拉 660 安圭拉 010 南极洲 028 安提瓜和巴布达 032 阿根廷 05 ...
- Reading query string values in JavaScript
时间 2016-01-23 13:01:14 CrocoDillon’s Blog 原文 http://crocodillon.com/blog/reading-query-string-valu ...
- deepin修改默认Python2到Python3
第一步 打开终端 第二步 输入 sudo vi ~/.bashrc 然后你会看到如下界面: 切大写,输入E,进入如下界面,并在最后输入我已经输入的 alias python='python3' ,记住 ...
- 《JAVA设计模式》之状态模式(State)
在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为 ...
- [Python3 填坑] 015 __str__ 与 __repr__ 的区别
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 上例子 2.2 关系与区别 Python 3.7.3 的官方文档 网上看到一个例子,运行了一下 简单地说 1. print( 坑的信息 ...
- spring-第一篇之spring核心机制依赖注入(DI)/控制翻转(IoC)
1.spring的核心机制:依赖注入(DI)/控制翻转(IoC) 什么是依赖:A对象需要调用B对象,所以A依赖于B. 什么是注入:A对象注入一个属性B对象. 什么是依赖注入(DI):A对象依赖于B对象 ...
- kmp(前缀出现次数next应用)
http://acm.hdu.edu.cn/showproblem.php?pid=3336 Count the string Time Limit: 2000/1000 MS (Java/Other ...
- ReplaceAll 特殊字符处理
用到Json与replaceAll Http拦截脚本中经常需要替换,replace虽然不需要处理特殊字符,但是不能匹配多个,ReplaceAll能够使用正则,不过需要处理的转移实在太多 比如,需要替换 ...
- jar包/class文件如何快速反编译成java文件
有时编写的java代码打包为可执行jar包后需要查看工程结构是否是且只有我们需要的包,故需要查看jar包层级. 1.windows系统可以直接在网上下载jd-gui.exe包,然后傻瓜安装: 2.Ma ...
- java静态方法使用泛型
用法 import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.ut ...