aizu2266-Cache Strategy 最小费用最大流,区间权值最大

这题转化成区间限制权值最大问题,类似于poj3680;我们回顾下吧 orz首先poj3680意思是给出n个区间,每个区间有自己的
权值,使得选出一些区间,使得权值和最大但是不能有点被超过k个区间覆盖。首先,每个权值可以是费用当中用
负值表示,建图方式是首先把所有点按x坐标由小到达排序,于是只看这些点(2*n个,离散下),起点到最左点建容量为
k,cost为0的边,对于每个点都向后面一个点建一个容量为k,cost=0的边,对于每个区间内部,从左端点建一个指向右端点
容量为1(表示只能选一次咯),cost为-w【i】,这样求得的最小费用既是答案。那么看看此题orz首先花费要最少,刚才求的是权值最大那怎么办呢。。。其实花费那就是节约的多,于是可以看怎么弄才能节约最多,对于这m个盒子,如果一个盒子能保持一种颜色从x操作到y操作,他们都是x和y颜色和这个保持的一样,那么就是区间了。所以可以用1个盒子来装入新球,其他m-1个盒子用来省钱用hh,

比如 index: 1 2 3 4 5 6
     color:  1 2 3 1 2 3
1号颜色在1和4出现,那么可以转化成刚才那题的1->3区间权值为w[1],为什么是1->3而不是1->4呢,是因为,走到index=3的时候
把3号求放入那个装新球的特别的盒子的时候,其实顺便可以把这个盒子当成用来省钱的盒子,而那个省钱用的装着1号的盒子就用来装新球了。

#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll inf = (ll)1<<61;
const ll mmax = 200020;
const ll nmax = 200020;

struct Edge
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值