【JZOJ1259】牛棚安排

Farmer John决定重新安排牛棚以最小化奶牛的不满情绪。每头奶牛对其它牛棚都有好感度排序,目标是找到最小的郁闷指数跨度。解决方案涉及二分搜索和网络流算法,确保每个牛棚不超过其容量,并找到最优分配。
摘要由CSDN通过智能技术生成

description

Farmer John的N(1<=N<=1000)头奶牛分别居住在农场所拥有的B(1<=B<=20)个牛棚的某一个里。有些奶牛很喜欢她们当前住的牛棚,而另一些则讨厌再在它们现在所在的牛棚呆下去。
FJ在忍受了若干次奶牛的抱怨后,决定为所有奶牛重新安排牛棚,使最不满的那头奶牛与最高兴的奶牛的心情差异最小,即使这会让所有奶牛都更加郁闷。
每头奶牛都把她对各个牛棚的好感度从高到低排序后告诉了FJ。当然,如果一头奶牛被安排到的牛棚在她给出的列表中越靠后,她就会越郁闷。你可以认为奶牛的郁闷指数是她被分配到的牛棚在列表中的位置。奶牛们是斤斤计较的,她们无法容忍别的奶牛在自己喜欢的牛棚里快乐地生活,而自己却呆在一个自己不喜欢的牛棚里。每个牛棚都只能容纳一定数量的奶牛。FJ希望在每个牛棚都没有超出容量限制的前提下,使最郁闷和最高兴的奶牛的郁闷指数的跨度最小。
FJ请你帮他写个程序,来计算这个最小的郁闷指数跨度到底是多少。


analysis

  • 二分 + + +网络流,考试没读懂题少考虑了一种情况

  • 对于每个牛棚,二分找出它到接下来最少第几个牛棚可以让所有牛住得下

  • 这个判断用二分图匹配或者跑网络流,因为牛棚很少于是枚举也行

  • S S S和牛连流量为 1 1 1的边,牛和牛棚连流量为 1 1 1的边,牛棚和 T T T连流量为牛棚容量的边

  • S A P SAP SAP多快,记录最小值就好了


code

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXN 2005
#define MAXM 50005
#define INF 1000000007
#define ll long long
#define fo(i,a,b) for (ll i=a;i<=b;++i)
#define fd(i,a,b) for (ll i=a;i<=b;--i)
#define rep(i,a) for (ll i=last[a];i;i=next[i])

using namespace std;

ll last[MAXM],next[MAXM],tov[MAXM],len[MAXM],cur[MAXM];
ll f[21],d[MAXN],gap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值