analysis

有点麻烦

这道题的题解在

数与图的完美结合
-------浅析差分约束系统
华中师大一附中 冯威

这篇国集论文里面有,这篇论文很不错

还是说一下大概的思路(自己敲了半天也没敲出来思路):

设num[i] 为来应聘的在第i个小时开始工作的人数
r[i] 为第i个小时至少需要的人数
x[i] 为招到的在第i个小时开始工作的人数
根据题意有:
0 <= x[i] <= num[i]
x[i] + x[i-1] + …+ x[i-7] >= r[i] (题目中的连续工作8小时)
再设 s[i] = x[1] + … + x[i]
则有: s[i] – s[i-1] >= 0
s[i-1] – s[i] >= –num[i]
s[i] – s[i-8] >= r[i], 8 <= i <= 24
s[i] – s[i+16] >= r[i] – s[24], 1<= i <= 7
还需要添加一个隐藏不等式: s[24] – s[0] >= ans(枚举的答案)
通过枚举s[24],来检测是否满足条件(题目是求最小值,即求最长路,以0为源点),每次跑完spfa后,就看算出来的s[24]和枚举的是不是一样就行,因为spfa求出来的是当前约束条件下的最小值,于是只要从小到大枚举ans和s[24]相等了就说明当前的最小值是ans

这道题有待消化(总觉得有哪里没弄懂,但又说不出来)

code

#include<bits/stdc++.h>
using namespace std;
#define loop(i,start,end) for(register int i=start;i<=end;++i)
#define clean(arry,num) memset(arry,num,sizeof(arry))
template<typename T>void read(T &x){char r=getchar();T neg=1;x=0;while(r>'9'||r<'0'){if(r=='-')neg=-1;r=getchar();}while(r>='0'&&r<='9'){x=(x<<1)+(x<<3)+r-'0';r=getchar();}x*=neg;
}
int T;
int R[50];
int num[50];
int n;
struct node{int e;int w;int nxt;
}edge[50<<2];
int head[50];
int cnt=0;
inline void addl(int u,int v,int w){edge[cnt].e=v;edge[cnt].w=w;edge[cnt].nxt=head[u];head[u]=cnt++;
}
inline void buildgraph(int w){clean(head,-1);cnt=0;addl(0,24,w);loop(i,1,24){addl(i-1,i,0);addl(i,i-1,-num[i]);if(i>=9)addl(i-8,i,R[i]);else if(i<=8)addl(i+16,i,R[i]-w);}
}
queue<int>q;
int dis[50];
bool insta[50];
int in[50];
bool spfa(int ans){loop(i,1,40)dis[i]=-0x3f3f3f3f;clean(insta,false);clean(in,0);dis[0]=0;++in[0];q.push(0);while(q.empty()==false){int f=q.front();q.pop();insta[f]=false;for(int i=head[f];i!=-1;i=edge[i].nxt){int v=edge[i].e;if(dis[v]<dis[f]+edge[i].w){dis[v]=dis[f]+edge[i].w;if(!insta[v]){insta[v]=true;q.push(v);if(++in[v]>24){while(q.empty()==false)q.pop();return false;}}}}}return (dis[24]==ans)?true:false;
}
int main(){#ifndef ONLINE_JUDGEfreopen("datain.txt","r",stdin);#endifread(T);while(T--){clean(head,-1);cnt=0;loop(i,1,24)read(R[i]);read(n);clean(num,0);loop(i,1,n){int ti;read(ti);++num[ti+1];}bool flag=false;loop(i,0,n){buildgraph(i);if(spfa(i)){printf("%d\n",i);flag=true;break;}}if(!flag)printf("No Solution\n");}return 0;
}

poj1275 「一本通 3.4 例 2」出纳员问题相关推荐

  1. 【C++】「一本通 1.1 例 4」加工生产调度

    「一本通 1.1 例 4」加工生产调度 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1425 LibreOJ ...

  2. LibreOJ10082. 「一本通 3.3 例 1」Word Rings【二分+SPFA】

    10082. 「一本通 3.3 例 1」Word Rings [题目描述] 传送门 [题解] 将一个字符串看成一条边,字符两端的字符看成节点,长度看成权值.二分枚举答案,最后SPFA刷正环,因为只要有 ...

  3. 【C++】「一本通 1.1 例 2」种树

    「一本通 1.1 例 2」种树 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [解析] [代码] [来源] 一本通题库-1423 LibreOJ-10001 vjud ...

  4. #10001. 「一本通 1.1 例 2」种树

    #10001. 「一本通 1.1 例 2」种树 满足n个区间种树的要求,求最少种多少棵数 思路 按照区间的尾巴来排序,因为如果区间有重叠的种在第一个区间的尾巴可以使得种树更少,所有每次始从尾巴开始种树 ...

  5. 【C++】「一本通 1.1 例 5」智力大冲浪

    「一本通 1.1 例 5」智力大冲浪 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1426 LibreOJ- ...

  6. Loj 10115 「一本通 4.1 例 3」校门外的树 (树状数组)

    题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的 ...

  7. #10003. 「一本通 1.1 例 4」加工生产调度(贪心)

    加工生产调度 题目描述 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.询问怎样安排这 ...

  8. 「一本通 4.1 例 3」校门外的树 (loj10115)

    题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两种操作: K=1,读入 l,r表示在 l 到 r 之间种上 ...

  9. loj10157. 「一本通 5.2 例 5」皇宫看守

    思路: 例四是覆盖全部边,dp两个状态,例五是覆盖全部点,dp三个状态. #include<cstdio> #include<iostream> #include<cst ...

最新文章

  1. 《微信跳一跳》安卓手机刷分软件搭建及攻略
  2. 文本编辑器实现复制、剪切、粘贴、撤销、重做操作
  3. Tensorflow详解保存模型(进阶版一):如何有选择的保存变量
  4. php Imagick()扩展,实现将原图截取成不同规格尺寸的图片
  5. cocos2d 环绕已知点移动一圈
  6. Accumulator
  7. 2020下半场:10本书教会你学习、思考和生活
  8. 环境搭建创建一个javaweb+maven+Jfinal项目
  9. C#调用C++编写的COM DLL
  10. win10照片不能下一张的解决办法
  11. java实习报告_Java实习报告总结3篇
  12. 使用 onpropertychange 和 oninput 检测 input、textarea输入改变
  13. 嵌入式linux系统开发教程
  14. 【杂项】VScode中C C++代码美化工具Uncrustify配置详解
  15. html怎么给一段文字加边框,css怎么给文字加边框
  16. tp5模板使用php函数,tp5模板变量使用自定义函数
  17. 光环效应引发的认知误区
  18. html中创建母版页,自定义“我的网站”母版页
  19. 微信竟可以查出行轨迹了,预计又一波情侣要分手?
  20. 创建facebook_我如何重新创建Facebook的微交互以进行功能发现

热门文章

  1. java 视频压缩转码_java实现视频压缩转码
  2. jQuery Ui Tabs插件使用问题记录
  3. 可以将TCP BBR算法模块化到低版本内核取代锐速吗
  4. Vista下AD1980/AD198X声卡驱动
  5. JAVA中阻塞队列的类别和区别(转载)
  6. excel单元格设置下拉列表
  7. Linux复制命令cp进阶
  8. 从前有座灵剑山--理想以及狂热(6)
  9. 天线理论巴拉尼斯_天线理论与技术 - 心理学书籍 psychspace.com/钟顺时/
  10. 例说Verilog HDL和VHDL区别,助你选择适合自己的硬件描述语言