给出n个工作的时间段,以及工作带来的价值,问工作k天,能得到的最大价值是多少
同poj 3680:n条线段,每条线段有价值,每条线段最多选k次,求选取到的最大价值是多少
先对线段的端点进行离散化,从每条线段的起点向终点连一条边,容量为1,费用为-w,。
对于相邻的两个时间点,从小的时间向大的时间连一条边,容量为k,费用为0,代表完成一个任务之后可以马上进行下一个任务,最多走k次。
最后s向每个时间点连一条边,表示每天可以从每个时间点开始,容量为k,费用为0
每个时间点向汇点连一条边,表示每天可以随时结束,容量为k,费用为0
因为每个时间点已经相通了,也可以直接连上s->最小的时间点,最大的时间点->t,容量为k,费用为0
最后求s到t的最小费用最大流,结果取反即为最大费用
3762 Accepted 6160K 1157MS G++ 3158B