POJ1275Cashier Employment(查分约束系统)
链接1275Cashier Employment
题目大意就是说有一些人来应聘一个超级市场的工作,每个人的应聘的起始时间在0~23时之间,而超市在时间i需要R[i]个工作人员,而每个人的工作时间都是8小时,问最少需要多少人使得超市一天24小时满足超市的工作人数的需要。
设工作时间为1~24时,S[i]表示前i个小时所需要的工作人数的最小值,那么结果就可以表示成0为起点,24为终点的最短路。下面是约束不等式:
0<=S[i] - S[i-1]<= t[i] (1<=i<=24)
S[i] - S[i-8] >= R[i] (8<=i<=24)
S[i] + S[24] - S[i+16] >= R[i] (0<=i<=7)
整理之后:
S[i] - S[i-1] >= 0 (1<=i<=24)
S[i-1] - S[i] >= -t[i] (1<=i<=24)
S[i] - S[i-8] >= R[i] (8<=i<=24)
S[i] - S[i+16] >= R[i] - S[24] (0<=i<=7)
这样按照A-B >= W就可以建一些由B指向A的权值为W的有向边,求最长路。
或则是A指向B的权值为-W的有向边,并求其最短路。
另外,由于上图中S[24]是不知道的,所以枚举它就行,我是二分枚举的。
数据比较水(只有24个小时),用Bellman-Ford即可:
1 #include <map> 2 #include <set> 3 #include <stack> 4 #include <queue> 5 #include <cmath> 6 #include <ctime> 7 #include <vector> 8 #include <cstdio> 9 #include <cctype> 10 #include <cstring> 11 #include <cstdlib> 12 #include <iostream> 13 #include <algorithm> 14 using namespace std; 15 #define eps 1e-15 16 #define MAXN 25 17 #define INF 1000000007 18 #define MAX(a,b) (a > b ? a : b) 19 #define MIN(a,b) (a < b ? a : b) 20 #define mem(a) memset(a,0,sizeof(a)) 21 22 struct EDGE 23 { 24 int v; 25 int w; 26 int next; 27 }edge[3*MAXN]; 28 int head[MAXN], d[MAXN],tot,T,N,R[MAXN],t[MAXN],ans,x; 29 30 bool Bellman_Ford(int s) 31 { 32 for(int i=0;i<=24;i++) d[i] == (i==s)?0:INF; 33 for(int k=1;k<=24;k++) 34 { 35 for(int i=0;i<=24;i++) 36 { 37 for(int e = head[i];d[i]!=INF && e!=-1;e=edge[e].next) 38 { 39 if(d[edge[e].v]>d[i]+edge[e].w) 40 { 41 d[edge[e].v] = d[i] + edge[e].w; 42 } 43 } 44 } 45 } 46 for(int i=0;i<=24;i++) 47 { 48 for(int e = head[i];d[i]!=INF && e!=-1;e=edge[e].next) 49 { 50 if(d[edge[e].v]>d[i]+edge[e].w)return false; 51 } 52 } 53 return true; 54 } 55 56 void AddEdge(int u,int v,int w) 57 { 58 edge[tot].v = v; 59 edge[tot].w = w; 60 edge[tot].next = head[u]; 61 head[u] = tot++; 62 } 63 64 void BuildGragh(int NumOfPer)//由于每次总人数都不一样,所以需要重新建图 65 { 66 tot = 0; mem(edge); memset(head,-1,sizeof(head)); 67 for(int i=1;i<=24;i++){AddEdge(i-1,i,t[i]); AddEdge(i,i-1,0);} 68 for(int i=8;i<=24;i++) AddEdge(i,i-8,-R[i]); 69 for(int i=0;i<=7;i++) AddEdge(i,i+16,NumOfPer-R[i]); 70 AddEdge(24,0,-NumOfPer); 71 } 72 73 74 void BSearch(int low,int high)//对总人数二分 75 { 76 if(low > high)return ; 77 int mid = (low + high) / 2; 78 BuildGragh(mid); 79 if(Bellman_Ford(0))//表示可以找到一种解决方案 80 { 81 ans = mid; 82 BSearch(low, mid-1); 83 } 84 else 85 { 86 BSearch(mid+1,high); 87 } 88 } 89 90 int main() 91 { 92 while(~scanf("%d", &T))while(T--) 93 { 94 95 mem(R); mem(t); 96 for(int i=1;i<=24;i++) 97 { 98 scanf("%d", &R[i]); 99 } 100 scanf("%d", &N); 101 for(int i=0;i<N;i++){ scanf("%d", &x); t[x+1]++;} 102 ans = -1; 103 BSearch(1,N); 104 if(ans == -1) printf("No Solution\n"); 105 else printf("%d\n",ans); 106 } 107 return 0; 108 }
转载于:https://www.cnblogs.com/gj-Acit/p/3264967.html
POJ1275Cashier Employment(查分约束系统)相关推荐
- POJ2983 查分约束系统
题意: 给你n个点,然后给你两种情况,P a b c,表明a在b的北边c那么远,V a b 表明a在b的北边(距离最少是1),问你这些条件是否冲突. 思路: 一开始想用带权并 ...
- 学习笔记 查分约束系统
定义:如果一个系统由n个变量和m个约束条件组成,形成m个形如 ai - aj ≤ k 的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统(system of difference cons ...
- POJ1275-Cashier Employment【差分约束系统】
正题 题目链接:http://poj.org/problem?id=1275 题目大意 1∼241\sim 241∼24小时中第iii个小时需要rir_iri个出纳员 有nnn个人应聘,第iii从x ...
- 2021梧州一中高考成绩查询,2021年广西高考成绩查询网站查分网址:https://www.gxeea.cn/...
[摘要]高考结束后大家最为关心的问题就是在哪里查分,如何查分,高考频道特别整理2021年广西高考成绩查询查分网址,成绩公布时考生可直接点击网址进行查分,预祝大家都能顺利的考上理想的大学! 由于,各省级 ...
- 喀什市2021年高考成绩查询,2021年新疆高考查分网站查分网址:http://www.xjzk.gov.cn/...
[摘要]高考结束后大家最为关心的问题就是在哪里查分,如何查分,高考频道特别整理2021年新疆高考成绩查询查分网址,成绩公布时考生可直接点击网址进行查分,预祝大家都能顺利的考上理想的大学! 由于,各省级 ...
- 英语四级计算机准考证查询,四级成绩查询_四级查分:什么?准考证不见了?!!!_沪江英语...
找回准考证号功能使用说明: 为方便广大考生查询分数,99宿舍提供准考证号找回服务.若你忘记准考证号可通过客服系统提交姓名.学校等信息,99宿舍将为你提供相匹配的准考证号.准考证找回功能仅供参考,准确准 ...
- 2021略阳天津高级中学高考成绩查询,2021年天津高考成绩查询网站查分网址:http://www.zhaokao.net/...
[摘要]高考结束后大家最为关心的问题就是在哪里查分,如何查分,高考频道特别整理2021年天津高考成绩查询查分网址,成绩公布时考生可直接点击网址进行查分,预祝大家都能顺利的考上理想的大学! 由于,各省级 ...
- 2021年河北高考生成绩排名查询,2021年河北高考成绩查询网站查分网址:http://www.hebeea.edu.cn/...
[摘要]高考结束后大家最为关心的问题就是在哪里查分,如何查分,高考频道特别整理2021年河北高考成绩查询查分网址,成绩公布时考生可直接点击网址进行查分,预祝大家都能顺利的考上理想的大学! 由于,各省级 ...
- 吉林高考成绩查询2021年几号公布,2021年吉林高考成绩查询时间及查分方式
2021年吉林高考成绩什么时候公布,几月几号可以查分?吉林高考分数查询时间在6月下旬,具体时间安排及查分方式如下,仅供参考. 2021吉林高考什么时候查分 预计成绩查询时间:6月24日左右 吉林高考成 ...
最新文章
- 确定有限状态机和非确定有限状态机详解 包含Java实现源码(Nondeterministic finite automata)
- Linux Shell常用技巧(目录)
- delphi 保存数据到sql_介绍一款免费好用的可视化数据库管理工具
- layUI框架中文件上传前后端交互及遇到的相关问题
- 正则表达式提取字符串内所有的img标签下的src路径
- python编程数学函数_【编程】Python数学函数
- spring的钩子_模板方法模式——看看 JDK 和 Spring 是如何优雅复用代码的
- 一款纯HTML二次元响应式引导页
- java 远程监控文件系统_Java 文件系统监控(WatchService)
- lstm中look_back的大小选择_[Pytorch和Tensorflow对比(二)]:LSTM
- [python]一个遍历多层文件夹,然后替换文件内容和目录名称的案例
- java paint方法_在Java中,为了使paint()方法执行,以下各项中,()是最佳的调用方法
- python编程方式_python的两种编程方式是什么
- Xcode8 官方下载地址
- java程序的运行结果依赖操作系统吗_SunJava程序员认证考试试题
- 继承QPushButton重写MouseEvent后按钮clicked信号不响应
- java base64转二进制_使用Java将Base64转换为二进制
- 云服务器的出网宽带和入网宽带是什么?
- 【分析】云硬盘的Burst功能
- java在regedit找不到_Windows找不到文件regedit打不开注册表的解决办法
热门文章
- java xml 表达式语言_中级Java开发工程师笔试题
- php 可编辑菜单,菜单的添加编辑
- python执行脚本时的命令行选项_Python 处理脚本的命令行参数(二):使用click
- java 正则比大小_Java:正则表达式模式匹配器是否有大小限制? - java
- 在线HTML网页小窗口复制不了,教你一招:解决某些网页不能复制的文字的N种方法!...
- SpringSecurity SecurityContextHolderSecurityContext
- javacript 布尔型
- centos rpm
- Citrix,微软,VMware:它们的优缺点(资料整理汇集)
- 对象存储 OSS > 开发指南 > 存储类型 > 存储类型介绍