描述 Description

后勤部队运来一批武器(机枪和盔甲)。你要把这些武器分配给手下的marine们(每人一部机枪,一套盔甲)。可是问题来了。。。
    这些武器的型号不相同(武器是由出价最低的承包商制造的),把一部m型的机枪和一套n型的盔甲分配给一个marine得到的不满意值为(m-n)^2(每个marine当然希望自己得到的武器是同一型号的)。
    你的任务就是把a部机枪和b套盔甲分配给手下n个marine。使他们的不满意值之和最小。

输入格式 InputFormat

第一行:3 个正整数 n , a , b (1<=n<=a,b<=80)
第二行:a 个数表示每部机枪的型号
第三行:b 个数表示每套盔甲的型号
0<=型号值<=10000

输出格式 OutputFormat

输出一个数:最小不满意值。

样例输入 SampleInput [复制数据]

Sample 1:
2 3 3
9 10 20
0 10 11
Sample 2:
3 4 4
3 9 7 4
4 2 5 5

样例输出 SampleOutput [复制数据]

Sample 1:
2
Sample 2:
5

题解

第一眼看有点像二分图匹配,但是有限定人数。所以用费用流。

直接在所有机枪和所有防弹衣之间连上有向边,边的费用为(a[i]-b[j])^2,容量为1。再加上超级源点0和第一汇点T1,费用为0,容量为1。

最后再加一个第二汇点T2,超级汇和第二汇点相连,费用为0,容量为n,用来进行人数限制。

最后来一次最小费用最大流就可以了。

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cmath>
#define inf 0x7fffffff
using namespace std;
int n,a,b,x[82],y[82],T1,T2,zz=1,head[201];
struct bian {int frm,to,v,nx,c;} e[50000];
int from[201],dis[201],q[201],ans;
bool pd[201];
void insert(int u,int v,int w,int z)
{
zz++; e[zz].frm=u; e[zz].to=v;
e[zz].v=w; e[zz].c=z; e[zz].nx=head[u]; head[u]=zz;
zz++; e[zz].frm=v; e[zz].to=u;
e[zz].v=0; e[zz].c=-z; e[zz].nx=head[v]; head[v]=zz;
}
void build()
{
for(int i=1;i<=a;i++)
for(int j=1;j<=b;j++)
insert(i,j+a,1,(x[i]-y[j])*(x[i]-y[j]));
for(int i=1;i<=a;i++) insert(0,i,1,0);
for(int i=1;i<=b;i++) insert(i+a,T1,1,0);
insert(T1,T2,n,0);
}
void init()
{
scanf("%d%d%d",&n,&a,&b);
for(int i=1;i<=a;i++) scanf("%d",&x[i]);
for(int j=1;j<=b;j++) scanf("%d",&y[j]);
T1=a+b+1; T2=T1+1;
}
bool spfa()
{
for(int i=0;i<=T2;i++) dis[i]=inf;
int t=0,w=1,i;
q[0]=dis[0]=0; pd[0]=1;
while(t!=w)
{int p=q[t]; t=(t+1)%200;
i=head[p];
while(i)
{if(e[i].v&&dis[e[i].to]>dis[p]+e[i].c)
{from[e[i].to]=i;
dis[e[i].to]=dis[p]+e[i].c;
if(!pd[e[i].to])
{q[w]=e[i].to; pd[e[i].to]=1; w=(w+1)%200;}
}
i=e[i].nx;
}
pd[p]=0;
}
if(dis[T2]==inf) return 0;
return 1;
}
void getf()
{
int i,xx=inf;
i=from[T2];
while(i)
{xx=min(e[i].v,xx); i=from[e[i].frm];}
i=from[T2];
while(i)
{e[i].v-=xx; e[i^1].v+=xx;
ans+=xx*e[i].c; i=from[e[i].frm];
}
}
void mcf()
{while(spfa()) getf();}
int main()
{
init(); build(); mcf();
printf("%d",ans);
return 0;
}

TYVJ 武器分配相关推荐

  1. tyvj1982 武器分配

    描述 后勤部队运来一批武器(机枪和盔甲).你要把这些武器分配给手下的marine们(每人一部机枪,一套盔甲).可是问题来了...     这些武器的型号不相同(武器是由出价最低的承包商制造的),把一部 ...

  2. 武器目标分配问题研究进展: 模型、算法与应用

    源自:系统公正与电子技术 作者:李梦杰  常雪凝  石建迈  陈超  黄金才  刘忠 摘 要 武器目标分配问题是指挥控制与任务规划领域的关键难点之一, 也是军事运筹领域的基础研究课题.经过多年研究, ...

  3. UE4 TRPG制作日志12

    继续考虑下面的:从前面几节归纳出来的要实现的事项> 技能的释放机制中: 需要优化法阵技能的释放 ,有的不应该是即时伤害,应该是法阵释放完成后再施加伤害.并不是直接delay就可以的,应该涉及到g ...

  4. golang大厂面试1

    golang大厂面试 Golang字节面试经验分享 第一面 面试官首先介绍说会有几轮面试 算法题 1.1 将整数转换二进制 然后将负数变成 例子 例如,n = 1(1:1 的二进制表示) 例如,n = ...

  5. 【特别篇】基于动态规划的武器指挥系统火力分配模型

    [特别篇]武器指挥分配决策火力问题的代码复现 写在前面 问题描述 问题假设 模型建立 动态规划 战争火力模拟 代码区 写在前面 本文仍然只是B站相关视频的代码复现,感兴趣的朋友可以进一步了解武器指挥分 ...

  6. 你的声音作为一种“武器”:人类战争中声学活动

    来源:数据实战派本文约4600字,建议阅读9分钟 本文为你介绍人类战争中的声学活动. 根据<一战的结束:一个图形记录>(The End of The War: A Graphic Reco ...

  7. 半导体终极武器光刻机:为何中国难望ASML项背?!有了全套图纸也做不出来

    来源: XuS风险创投行 指甲盖大小的芯片,密布千万电线,纹丝不乱,需要极端精准的照相机--光刻机.光刻机精度,决定了芯片的上限. EUV 半导体业的终极武器 这全靠总部后头那栋最高机密的巨型厂房,里 ...

  8. PowerPath/VE:EMC夯实虚拟环境的独门武器

    请点击注册阅读详细内容,参加赠品活动: http://www.emc-china.com/eon/Register_r.asp?agree=1&sfrom=51cto_powerpath Po ...

  9. 揭密Oracle之 七种武器

    揭密Oracle之 七种武器 第一章 搭建测试环境 vage 揭密Oracle之 七种武器  第一章 搭建测试环境 (揭密Oracle之七种武器第二章地址:DTrace语法:跟踪物理IO http:/ ...

最新文章

  1. php接口 汉字出错 空,php接口开发时,数据解析失败问题,字符转义,编码问题(示例代码)...
  2. LDD3源码分析之访问控制
  3. 最近阅读20171106
  4. 7 Statistical estimation
  5. Silverlight中使用MVVM(9)-绑定Enum类型数据
  6. [Ext JS 4] 实战之Grid, Tree Gird 动态添加行
  7. 腾讯云大数据团队主导Apache社区新一代分布式存储系统Ozone 1.0.0发布
  8. 向新手和不愿意尝试的童鞋推荐vim插件(转载)
  9. 批量归一化Batch Normalization 动手学深度学习v2
  10. 51单片机(STC15W408AS)映射printf函数 串口收发实现
  11. office转PDF文档
  12. 网易面试总结(2014.12.31)
  13. 比“花书”更合适入门者的“鱼书”
  14. 酒店ETL管理解决方案
  15. default、mms、supl、dun、hipri接入点类型的区别
  16. # C语言指数型表达
  17. 超声波测距仪编程_超声波测距详细资料及程序代码
  18. Ubuntu 命令行 安装 Operator Mono 字体
  19. lae界面开发工具入门之介绍六--状态篇
  20. macbook插入耳机不出声

热门文章

  1. 小红书520种草?节日营销有方法!
  2. 净利润同比下滑26%,亚马逊朝万亿市值越“跑”越遥远?
  3. Unity3D Ruby‘s Adventure
  4. 『NLP学习笔记』Triton推理服务器加速模型推理
  5. redis4.0.14哨兵自动故障迁移失败
  6. python实现情感分析流程-【转】用python实现简单的文本情感分析
  7. ubuntu-l2tpv3配置介绍
  8. python 窗体k线图_一眼看清股市状况之用Python绘制K线图
  9. java类与对象 学习笔记
  10. 百度索引量一直掉?3个变化追查投诉方法