01规划

a1+a2+a3+...+ai/b1+b2+b2+..bi最大

设一个k

使得

  a1+a2+a3+...+ai/b1+b2+b3+...bi>=k

变换式子得到

  a1+a2+a3+...ai>=(b1+b2+b3+..+bi)*k

  a1-b1*k+a2-b2*k+a3-b3*k+...+ai-bi*k>=0

  ai-bi*k即流量

  最大费用流+二分答案

来,上代码:

#include <cmath>
#include <cstdio>
#include <iostream>using namespace std;#define eps 1e-8
#define maxn 205int ai[maxn][maxn],bi[maxn][maxn],ma,mi,pre[maxn],s,t,h,tail,cnt;
int n,head[maxn],E[maxn*maxn],V[maxn*maxn],F[maxn*maxn],que[maxn<<8];double W[maxn*maxn],suma,sumb,dis[maxn];bool if_[maxn];inline void in(int &now_)
{register int now=0;register char Cget=getchar();while(Cget>'9'||Cget<'0') Cget=getchar();while(Cget>='0'&&Cget<='9'){now=now*10+Cget-'0';Cget=getchar();}now_=now;
}inline bool spfa()
{for(int i=s;i<=t;i++) dis[i]=-1e6,pre[i]=-1,if_[i]=false;h=maxn<<4,tail=h+1,que[h]=s,dis[s]=0,if_[s]=true;while(h<tail){register int now=que[h++];if_[now]=false;for(register int i=head[now];i;i=E[i]){if(dis[V[i]]<dis[now]+W[i]&&F[i]>0){pre[V[i]]=i;dis[V[i]]=dis[now]+W[i];if(!if_[V[i]]){if_[V[i]]=true;if(dis[V[i]]>dis[que[h]]) que[--h]=V[i];else que[tail++]=V[i];}}}}return dis[t]!=-1e6;
}int main()
{freopen("ball.in","r",stdin);freopen("ball.out","w",stdout);in(n);t=n<<1|1;for(register int i=1;i<=n;i++){ma=0;for(register int j=1;j<=n;j++) in(ai[i][j]),ma=max(ma,ai[i][j]);suma+=ma;}for(register int i=1;i<=n;i++){mi=0x7fffffff;for(register int j=1;j<=n;j++) in(bi[i][j]),mi=min(mi,bi[i][j]);sumb+=mi;}double l=0,r=suma/sumb,mid,ans;while(r-l>eps){mid=(l+r)/2.0,cnt=1;for(register int i=s;i<=t;i++) head[i]=0;for(register int i=1;i<=n;i++){E[++cnt]=head[s],V[cnt]=i,F[cnt]=1,W[cnt]=0,head[s]=cnt;E[++cnt]=head[i],V[cnt]=s,F[cnt]=0,W[cnt]=0,head[i]=cnt;E[++cnt]=head[t],V[cnt]=i+n,F[cnt]=0,W[cnt]=0,head[t]=cnt;E[++cnt]=head[i+n],V[cnt]=t,F[cnt]=1,W[cnt]=0,head[i+n]=cnt;for(register int j=1;j<=n;j++){register int o=j+n;register double pos=(double)ai[i][j]-mid*bi[i][j];E[++cnt]=head[i],V[cnt]=o,F[cnt]=1,W[cnt]=pos,head[i]=cnt;E[++cnt]=head[o],V[cnt]=i,F[cnt]=0,W[cnt]=-pos,head[o]=cnt;}}double sum=0;while(spfa()){sum+=dis[t];register int now=t;while(pre[now]!=-1) F[pre[now]]--,F[pre[now]^1]++,now=V[pre[now]^1];}if(sum>0) ans=mid,l=mid+eps;else r=mid-eps;}printf("%.6lf",ans);fclose(stdin),fclose(stdout);return 0;
}

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6691178.html

SDOI2017 新生舞会相关推荐

  1. BZOJ 4819: [Sdoi2017]新生舞会

    二次联通门 : BZOJ 4819: [Sdoi2017]新生舞会 /*BZOJ 4819: [Sdoi2017]新生舞会二分 + 01分数规划 + 最小费用流二分出一个答案费用流检验*/ #incl ...

  2. BZOJ4819: [Sdoi2017]新生舞会

    BZOJ4819: [Sdoi2017]新生舞会 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴. 有n个男生和n个女生参加舞会买一个男生和一个女 ...

  3. 【BZOJ 4819】 4819: [Sdoi2017]新生舞会 (0-1分数规划、二分+KM)

    4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 601  Solved: 313 Description 学 ...

  4. [SDOI2017]新生舞会

    题目描述 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴. 有个男生和个女生参加舞会买一个男生和一个女生一起跳舞,互为舞伴. Cathy收集了这些同学之间的关系,比如两个 ...

  5. BZOJ 4819 Luogu P3705 [SDOI2017]新生舞会 (最大费用最大流、二分、分数规划)

    现在怎么做的题都这么水了.. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4819 (luogu) https://ww ...

  6. bzoj4819 [Sdoi2017]新生舞会 分数规划(实数二分)+网络流检验

    这个题其实就是二分检验.. 稍微移个项就可以得到(a1-c*b1)+(a2-c*b2)+-- 这样贡献就化成了具体到每次决策的影响,c显然满足连续性,所以可以二分c 跑最大流以求得到最大的值使当前答案 ...

  7. codevs 5965 [SDOI2017]新生舞会

    分数规划的裸题. 不会分数规划的OIer.百度:胡伯涛<最小割模型在信息学竞赛中的应用> /* TLE1: last:add(i,j+n,1e9,(real)((real)a[i][j]- ...

  8. bzoj 4819 [Sdoi2017]新生舞会

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4819 题解 这题很好想 首先二分答案 然后令w[i][j]=a[i][j]-b[i][j]* ...

  9. 【BZOJ4819】【SDOI2017】新生舞会(01分数规划,带权二分图匹配)

    Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的 ...

最新文章

  1. c语言在键盘输入abc回车,C语言期末考试试卷子商务1111、21.doc
  2. ehcache使用_Mybatis整合(Redis、Ehcache)实现二级缓存,恕我直言,你不会
  3. 公开课视频-浅谈前端性能测试
  4. 小白Linux入门之:常用命令介绍
  5. SpringMVC中@RequestMapping参数设置
  6. editplus破解源码
  7. POI合并单元格后设置边框
  8. 十大排序算法总结与实现
  9. FPGA Vivado AXI _DMA IP介绍
  10. css中鼠标手,css各种鼠标手型集合
  11. termux获取sd卡读写权限_原来是用错了读卡器,雷克沙lexar 1667X 真实读写性能测试...
  12. 常用的软件工程相关技术标准
  13. C++ GUI Programming with Qt4 Second Edition 之 附录A.3 Mac系统Qt的安装
  14. Communication error with Jack server
  15. Java通过javacsv实现读取csv文件数据
  16. 【ubuntu】首选项和应用程序命令(preference application)
  17. 安装了,还是显示证书无效
  18. 计算机网络---TCP流量控制和拥塞控制
  19. python3的飞机大战实现
  20. 将oracle 转换 bak格式,MSSQL数据库文件MS.BAK转换为ORACLE数据库文件OR.dmp

热门文章

  1. postgresql数据库去重方法
  2. 链表 - Part I
  3. JAVA编程心得-JAVA实现CRC-CCITT(XMODEM)算法
  4. 将DataTable的内容以EXCEl的形式导出到本地
  5. 计算机数据恢复专业,专业电脑数据恢复软件哪个好
  6. 谈谈你对IOC的理解
  7. java resourcebundle_Java - Properties和ResourceBundle类学习
  8. 电脑维修:电脑维修必备工具整理
  9. 程序员幽默:工作群里常见表情的真正含义……
  10. 重磅!GitHub官方App官宣发布了