网站流量数据分析怎么做,wordpress 头像 virtos,大众汽车网站建设,中国建设银行网站官网正题
题目链接:http://poj.org/problem?id1275 题目大意 1∼241\sim 241∼24小时中第iii个小时需要rir_iri个出纳员 有nnn个人应聘#xff0c;第iii从xix_ixi开始工作#xff0c;一直工作8个小时。 求至少要招募多少人应聘。 解题思路 numinum_inumi表示第iii个小时有…正题
题目链接:http://poj.org/problem?id1275 题目大意
1∼241\sim 241∼24小时中第iii个小时需要rir_iri个出纳员 有nnn个人应聘第iii从xix_ixi开始工作一直工作8个小时。 求至少要招募多少人应聘。 解题思路
numinum_inumi表示第iii个小时有多少人招聘。 设定kik_iki表示第iii个小时放多少人 这时需要ki≥rIk_i\geq r_Iki≥rI且∑i07num(n−i24)%241≤ki\sum_{i0}^7num_{(n-i24)\%241}\leq k_i∑i07num(n−i24)%241≤ki 这时我们要设定差分约束si∑i1isis_i\sum_{i1}^is_isi∑i1isi 然后得出 si−si−1≥0s_i-s_{i-1}\geq 0si−si−1≥0 si−1−si≥−numis_{i-1}-s_i\geq -num_isi−1−si≥−numi si−si−8≥ris_i-s_{i-8}\geq r_isi−si−8≥ri si−si16≥ri−s24s_i-s_{i16}\geq r_i-s_{24}si−si16≥ri−s24 然后因为最后一个式子有三个未知量所以我们枚举s24s_{24}s24就好了 codecodecode
#includecstdio
#includealgorithm
#includecstring
#includequeue
using namespace std;
const int N30;
struct edge{int to,next,w;
}a[N*8];
queueint q;
int T,n,tot;
int r[N],f[N],cnt[N],num[N],ls[N];
bool v[N],flag;
void addl(int x,int y,int w)
{a[tot].toy;a[tot].ww;a[tot].nextls[x];ls[x]tot;
}
void build(int x)
{tot0;memset(ls,0,sizeof(ls));addl(0,24,x);for(int i1;i24;i){addl(i-1,i,0);addl(i,i-1,-num[i]);if(i8) addl(i-8,i,r[i]);else addl(i16,i,r[i]-x);}
}
int spfa(int ans)
{memset(f,0xcf,sizeof(f));memset(cnt,0,sizeof(cnt));memset(v,0,sizeof(v));while(!q.empty()) q.pop();q.push(0);f[0]0;v[0]1;while(!q.empty()){int xq.front();v[x]0;q.pop();for(int ils[x];i;ia[i].next){int ya[i].to;if(f[x]a[i].wf[y]){f[y]f[x]a[i].w;if(!v[y]){q.push(y);v[y]1;}if(cnt[y]24)return 0;}}}if(f[24]ans) return 1;return 0;
}
int main()
{scanf(%d,T);while(T--){memset(num,0,sizeof(num));for(int i1;i24;i)scanf(%d,r[i]);scanf(%d,n);for(int i1;in;i){int x;scanf(%d,x);num[x1];}flag0;for(int i0;in;i){build(i);if(spfa(i)){flagtrue;printf(%d,i);break;}}if(!flag) printf(No Solution);putchar(\n);}
}