题目大意就是每个人都有自己喜欢的座位编号,喜欢的编号是要x的倍数就好,(1<=x<=10)一共10种情况,每种情况的人的数目不一样。

给你一个n,代表有编号1-n这n个座位,问最多能满足多少人的喜爱要求。

lcm(1...10)=2520    x跟k*lcm+x的因子情况是一样的(对于1-10这十个数来说) 因为显然k*lcm可以提出x的任意因子,而若不是x的因子,后面+x提一下会出现小数显然就不满足情况了 ,所以是完全一样的。。那么只要预处理出来1-2520的因子情况就可以了。。

然后就随便跑跑网络流就可以了。。。。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int q[N],head[N],tot,S,T,dis[N];
struct node{
int to,next,w;
}e[N<<];
void add(int u,int v,int w){
e[tot].to=v;e[tot].next=head[u];e[tot].w=w;head[u]=tot++;
e[tot].to=u;e[tot].next=head[v];e[tot].w=;head[v]=tot++;
}
bool bfs(){
int l=,r=;
q[r++]=S;
memset(dis,-,sizeof(dis));
dis[S]=;
while(l<r) {
int u=q[l++];
for(int i=head[u];~i;i=e[i].next){
int v=e[i].to;
if(dis[v]==-&&e[i].w>) {
dis[v]=dis[u]+;
q[r++]=v;
if(v==T) return true;
}
}
}
return false;
}
int dfs(int s,int low){
if(!low||s==T) return low;
int ans=low,a;
for(int i=head[s];~i;i=e[i].next){
int v=e[i].to;
if(e[i].w>&&dis[v]==dis[s]+&&(a=dfs(v,min(ans,e[i].w)))) {
ans-=a;
e[i].w-=a;
e[i^].w+=a;
if(!ans) return low;
}
}
if(low==ans) dis[s]=-;
return low-ans;
}
int vis[<<],mark[],lim[],p[];
void init(){
int cont=;
for(int i=;i<;++i) {
int S=;
for(int j=;j<=;++j) if(i%j==) S|=<<j;
if(!vis[S]) vis[S]=++cont,p[cont]=S;
mark[i]=vis[S];
}
}
int main(){
init();
int Ta,n,x;
for(scanf("%d",&Ta);Ta--;){
tot=;
memset(head,-,sizeof(head));
memset(lim,,sizeof(lim));
scanf("%d",&n);
S=,T=;
for(int i=;i<;++i) {
int now=n/;
if(i&&n%>=i) ++now;
lim[mark[i]]+=now;
}
for(int i=;i<=;++i) add(i+,T,lim[i]);
for(int i=;i<=;++i) {
scanf("%d",&x);
if(x) {
add(S,i,x);
for(int j=;j<=;++j) if(p[j]&(<<i)) add(i,j+,x);
}
}
int ans=;
while(bfs()) ans+=dfs(S,1e9+);
printf("%d\n",ans);
}
}

最新文章

  1. Python写一个Windows下的android设备截图工具
  2. ABP框架详解(六)Aspects
  3. C#中是否可以继承String类
  4. String课后作业
  5. Movie
  6. PHP输出中文乱码的问题
  7. 外网访问SVN
  8. OpenStack G版以后的Availability Zone与Aggregate Hosts
  9. UE4使用C++创建枚举变量适用于C++与蓝图
  10. Nginx简易编译安装
  11. 关于如何在ElementUI中实现统计Table筛选结果数量
  12. PHP中一些常用知识点
  13. Educational Codeforces Round 14 A. Fashion in Berland 水题
  14. [转]Memcache的原理和命中率的总结
  15. CSU 1598 最长公共前缀 (简单KMP或者暴力)
  16. CentOS部署NetCore - 2. 安装NetCore SDK On CentOS
  17. oracle建立用户与授权(转载)
  18. list count++
  19. 用API爬取天气预报数据
  20. hdu 1140(三维)

热门文章

  1. 从Spring迁移到Spring Boot
  2. 【Linux常见命令】xargs命令
  3. 《Microduino实战》——2.3 Microduino STM32核心系列
  4. Netty(七):EventLoop学习前导——Reactor模式
  5. Mockjs+Ajax实践
  6. 【10月新版】Aspose.Pdf 10月新版V17.10发布 | 附下载
  7. PHP版DES算法加密数据(3DES)另附openssl_encrypt版本
  8. ACM及各类程序竞赛专业术语
  9. Redis 到底是单线程还是多线程?我要吊打面试官!
  10. T - zxa and leaf HDU - 5682 二分+dfs