题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3550

题意:给出3×n个数字,从中选出一些数字,要求每连续的n个数字中选出的数字个数不超过K。使得选出的数字之和最大。

思路:跟这个差不多

http://www.cnblogs.com/jianglangcaijin/p/3799759.html

流量平衡方程:a[i]表示i选不选,b[i]表示第i个等式的辅助变量

0=0

a[1]+a[2]+……a[n]+b[1]=k
a[2]+a[3]+……a[n+1]+b[2]=k
…………
a[2*n+1]+a[2*n+2]+……+a[3*n]+b[2*n+1]=k
0=0
相减之后是:
a[1]+a[2]+……a[n]+b[1]=k
a[n+1]-a[1]+b[2]-b[1]=0
a[n+2]-a[2]+b[3]-b[2]=0
…………
-a[2*n+1]-a[2*n+2]-………-a[3*n]-b[2*n+1]=-k
 
struct node
{
    int u,v,flow,cost,next;
};

node edges[N*100];
int head[N],e;

void add(int u,int v,int flow,int cost)
{
    edges[e].u=u;
    edges[e].v=v;
    edges[e].cost=cost;
    edges[e].flow=flow;
    edges[e].next=head[u];
    head[u]=e++;
}

void Add(int u,int v,int flow,int cost)
{
    add(u,v,flow,cost);
    add(v,u,0,-cost);
}

int C[N],F[N],pre[N];
int visit[N];

int SPFA(int s,int t)
{
    clr(pre,-1);
    queue<int> Q;
    Q.push(s);
    int i;
	for(i=0;i<=t;i++) C[i]=INF,F[i]=0,visit[i]=0;
    int u,v,c,f;
    C[s]=0; F[s]=INF;
    while(!Q.empty())
    {
        u=Q.front();
        Q.pop();

        visit[u]=0;
        for(i=head[u];i!=-1;i=edges[i].next)
        {
            v=edges[i].v;
            c=edges[i].cost;
            f=edges[i].flow;
            if(f>0&&C[v]>C[u]+c)
            {
                C[v]=C[u]+c;
                F[v]=min(F[u],f);
                pre[v]=i;
                if(!visit[v])
                {
                    Q.push(v);
                    visit[v]=1;
                }
            }
        }
    }
    return F[t];
}

int MCMF(int s,int t)
{
    int ans=0,i,temp,x;
    while(temp=SPFA(s,t))
    {
        for(i=t;i!=s;i=edges[pre[i]].u)
        {
            x=pre[i];
            ans+=temp*edges[x].cost;
            edges[x].flow-=temp;
            edges[x^1].flow+=temp;
        }
    }
    return ans;
}

int n,K;

int a[N];

int main()
{

	n=getInt();
	K=getInt();
	clr(head,-1);
	int s=0,t=3*n+1;
	int i;
	for(i=1;i<=n*3;i++) a[i]=getInt();

	Add(s,1,K,0);
	Add(2*n+2,t,K,0);
	for(i=1;i<=n;i++) Add(1,i+1,1,-a[i]);
	for(i=n+1;i<=2*n;i++) Add(i-n+1,i+1,1,-a[i]);
	for(i=2*n+1;i<=3*n;i++) Add(i-n+1,2*n+2,1,-a[i]);
	for(i=1;i<=2*n+1;i++) Add(i,i+1,INF,0);

	int ans=MCMF(s,t);
	printf("%d\n",-ans);
}
 

BZOJ 3550 Vacation(最小费用最大流)的更多相关文章

  1. BZOJ 2668 [cqoi2012]交换棋子 | 最小费用最大流

    传送门 BZOJ 2668 题解 同时分别限制流入和流出次数,所以把一个点拆成三个:入点in(x).中间点mi(x).出点ou(x). 如果一个格子x在初始状态是黑点,则连(S, mi(x), 1, ...

  2. BZOJ 3876 [AHOI/JSOI2014]支线剧情 (最小费用可行流)

    题面:洛谷传送门 BZOJ传送门 题目大意:给你一张有向无环图,边有边权,让我们用任意条从1号点开始的路径覆盖这张图,需要保证覆盖完成后图内所有边都被覆盖至少一次,求覆盖路径总长度的最小值 最小费用可 ...

  3. 【BZOJ】1221: [HNOI2001] 软件开发(最小费用最大流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1221 先吐槽一下,数组依旧开小了RE:在spfa中用了memset和<queue>的版本 ...

  4. BZOJ 1927 星际竞速(最小费用最大流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1927 题意:一个图,n个点.对于给出的每条边 u,v,w,表示u和v中编号小的那个到编号 ...

  5. BZOJ 1061 志愿者招募(最小费用最大流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1061 题意:申奥成功后,布布经过不懈努力,终于 成为奥组委下属公司人力资源部门的主管.布 ...

  6. bzoj 1877 [SDOI2009]晨跑(最小费用最大流)

    Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十 ...

  7. bzoj 1927 [Sdoi2010]星际竞速(最小费用最大流)

    1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1576  Solved: 954[Submit][Statu ...

  8. bzoj 2245 [SDOI2011]工作安排(最小费用最大流)

    2245: [SDOI2011]工作安排 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1197  Solved: 580[Submit][Statu ...

  9. bzoj 1070 [SCOI2007]修车(最小费用最大流)

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3515  Solved: 1411[Submit][Status] ...

  10. BZOJ 1221: [HNOI2001] 软件开发(最小费用最大流)

    不知道为什么这么慢.... 费用流,拆点.... --------------------------------------------------------------------------- ...

随机推荐

  1. sql存储过程传入ID集合,和临时表的使用

    方式1: Declare @SQL NVarChar(max) set @SQL='select *from Loanee as a  ApplicationID in ('+@Application ...

  2. java-excel导出

    java excel导出分为两种2003年的格式和2007年的格式. 2003年的xls一个sheet限制65536. 2007年的xlsx限制为1048576. jxl导入2003 gradle j ...

  3. linux时区的设置

    到目前为止,个人的理解就是linux中设置时区就是修改配置文件 /etc/localtime 而通常的做法就是让这个文件作为符号链接,链接到 /usr/share/zoneinfo/ 中的某个特定的时 ...

  4. wangEditor——轻量化web富文本框

    wangEditor——轻量级web富文本编辑器 参见:wangEditor.github.io  或者  https://github.com/wangfupeng1988/wangEditor 交 ...

  5. django form使用学习记录

    Django forms使用容易, 又方便扩展, 因此Django admin和CBVs基本都基于forms使用. 事实上, 由于django forms的强大验证功能, 大多数Django API ...

  6. bash

    unix - Unlimited Bash History - Stack Overflowhttp://stackoverflow.com/questions/9457233/unlimited-b ...

  7. HID USB设备开发技术【转】

    本文转载自: 1.高速USB和USB2.0有区别吗?     高速USB和USB2.0是有区别的,区别在于USB2.0是一种规范,而"高速USB"仅指在USB2.0规范中数据传输率 ...

  8. E2PROM的尺寸

    买的E2PROM是128*8bit的, 就是只能存储128个byte, 妈的, 买小了. 实际需要的是10句, 可能加两个特殊句, "新手"跟"故障", 一共1 ...

  9. 安装SQL Server 2005

    在安装SQL Server 2005时,经常会遇到一些错误,从而使系统无法正常安装.下面讲解在安装过程中经常出现的一些错误及其解决的方法.1.解决在安装SQL Server 2005时安装程序被挂起的 ...

  10. eclipse折叠快捷键

    之前按代码折叠快捷键的时候发现时而灵时而不灵,今天突然发现了问题所在: 按ctrl+/(小键盘)使代码左边出现折叠标志 然后再按ctrl+shift+/(折叠)   , ctrl+shift+*(展开 ...