Vijos1891 学姐的逛街计划


描述

doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课.

偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天.

doc 很忧伤, 因为他还要陪学姐去逛街呢.

后来, doc发现, 如果自己哪一天智商更高一些, 陪学姐逛街会得到更多的好感度.

现在 doc 决定做一个实验来验证自己的猜想, 他拜托 小岛 预测出了 自己 未来 3n 天中, 每一天的智商.

doc 希望在之后的 3n 天中选出一些日子来陪学姐逛街, 要求在不违反校规的情况下, 陪学姐逛街的日子自己智商的总和最大.

可是, 究竟这个和最大能是多少呢?

格式

输入格式

第一行给出两个整数, n 和 k, 表示我们需要设计之后 3n 天的逛街计划, 且任意连续 n 天中不能请假超过 k 天.

第二行给出 3n 个整数, 依次表示 doc 每一天的智商有多少. 所有数据均为64位无符号整数

输出格式

输出只有一个整数, 表示可以取到的最大智商和.

样例1

样例输入1

5 3

14 21 9 30 11 8 1 20 29 23 17 27 7 8 35

样例输出1

195

限制

对于 20% 的数据, 1 <= n <= 12 , k = 3.

对于 70% 的数据, 1 <= n <= 40 .

对于 100% 的数据, 1 <= n <= 200 , 1 <= k <= 10.


将每个点拆成i和i’,从S向SS连容量为k费用为0的边,SS向每个点i连容量为1费用为0的边,每个i向i’连容量为1费用为价值的边,每个i’向T连容量为1费用为0的边,i’向[i+n,i+n*3]中的所有点连容量为1费用为0的边,跑最大费用流。

                                 " role="presentation">                                                                  —by Milky Way


#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2010;
const LL INF=1e18;
LL read(){
LL ans=0,w=1;char c=getchar();
while(!isdigit(c)&&c!='-')c=getchar();
if(c=='-')c=getchar(),w=-1;
while(isdigit(c))ans=ans*10+c-'0',c=getchar();
return ans*w;
}
struct Edge{
int from,to;
LL flow,cap,cost;
}E[N*N>>2];
vector<int> G[N];
int S,SS,T,n,tot=0,p[N];
LL d[N],f[N];
bool inq[N];
void add(int from,int to,LL cap,LL cost){
E[tot]=(Edge){from,to,0,cap,cost};
G[from].push_back(tot++);
E[tot]=(Edge){to,from,0,0,-cost};
G[to].push_back(tot++);
}
bool SPFA(LL &flow,LL &cost){
memset(inq,0,sizeof(inq));
queue<int> q;q.push(S);
inq[S]=1;
for(int i=1;i<=T;i++)d[i]=INF;
d[S]=p[S]=0,f[S]=INF;
while(!q.empty()){
int x=q.front();q.pop();inq[x]=0;
for(int i=0;i<G[x].size();i++){
Edge e=E[G[x][i]];
if(e.cap>e.flow&&d[e.to]>d[x]+e.cost){
d[e .to]=d[x]+e.cost;
p[e.to]=G[x][i];//记录经过哪条边
f[e.to]=min(f[x],e.cap-e.flow);
if(!inq[e.to])q.push(e.to),inq[e.to]=1;
}
}
}
if(d[T]==INF)return false;
flow+=f[T],cost+=f[T]*d[T];
int x=T;
while(x!=S){
E[p[x]].flow+=f[T];
E[p[x]^1].flow-=f[T];
x=E[p[x]].from;
}
return true;
}
LL mincost(){
LL flow=0,cost=0;
while(SPFA(flow,cost)){}
return cost;
}
int main(){
n=read();int k=read();
S=0,SS=n*6+1,T=SS+1;
add(S,SS,k,0);
for(int i=1;i<=n*3;i++){
int x=read();
add(SS,i,1,0);
add(i,i+n*3,1,-x);
add(i+n*3,T,1,0);
for(int j=i+n;j<=n*3;j++)
add(i+n*3,j,1,0);
}
printf("%lld\n",-mincost());
return 0;
}

Vijos1891 学姐的逛街计划 【费用流】*的更多相关文章

  1. vijos1891 学姐的逛街计划(线性规划)

    P1891学姐的逛街计划 描述 doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课.偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天. doc 很忧伤, 因为他还要陪 ...

  2. [vijos1891]学姐的逛街计划

                                                                     学姐的逛街计划 描述 doc 最近太忙了, 每天都有课. 这不怕, d ...

  3. 刷题总结——学姐的逛街计划(vijos1891费用流)

    题目: doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课.偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天. doc 很忧伤, 因为他还要陪学姐去逛街呢. 后来, ...

  4. Vijos 学姐的逛街计划

    传送门 题解传送门 线性规划,最小费用最大流. 神奇的操作. //Achen #include<algorithm> #include<iostream> #include&l ...

  5. [2019多校联考(Round 6 T3)]脱单计划 (费用流)

    [2019多校联考(Round 6 T3)]脱单计划 (费用流) 题面 你是一家相亲机构的策划总监,在一次相亲活动中,有 n 个小区的若干男士和 n个小区的若干女士报名了这次活动,你需要将这些参与者两 ...

  6. hdu 6118度度熊的交易计划(费用流)

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  7. loj 6008 餐巾计划 - 费用流

    题目传送门 传送门 题目大意 (经典题还不知道题意?) 容易想到需要把未使用的餐巾和已经使用的餐巾分开. 设$X_i$表示第$i$天已经的使用餐巾的点,设$Y_i$表示第$i$天还未使用的餐巾的点 我 ...

  8. CF 277E Binary Tree on Plane (拆点 + 费用流) (KM也可做)

    题目大意: 平面上有n个点,两两不同.现在给出二叉树的定义,要求树边一定是从上指向下,即从y坐标大的点指向小的点,并且每个结点至多有两个儿子.现在让你求给出的这些点是否能构成一棵二叉树,如果能,使二叉 ...

  9. Vijos1901 学姐的钱包

    描述 学姐每次出门逛街都要带恰好M元钱, 不过她今天却忘记带钱包了.可怜的doc只好自己凑钱给学姐, 但是他口袋里只有一元钱.好在doc的N位朋友们都特别有钱, 他们答应与doc作一些交换.其中第i位 ...

随机推荐

  1. servlet初始化参数

    使用<context-param>标签初始化的参数是被应用程序中所有的servlet所共享.但是有时候我们需要为某一个特定的servlet配置参数,这个时候我们就需要使用servlet初始 ...

  2. Memcached gets 命令

    Memcached gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空. 语法: gets 命令的基本语法格式如下: gets key 多个 key 使 ...

  3. springboot项目属性配置及注意事项

    在idea编辑器建的springboot项目中的resources包下的application.properties这个就是配置文件. 另外配置文件的文件名还可以是application.yml,在r ...

  4. Angular内提供了一个可以快速建立测试用web服务的方法:内存 (in-memory) 服务器

    如何使用 Angular 内存 (in-memory) 服务器https://segmentfault.com/a/1190000009898540

  5. 使用Netty做WebSocket服务端

    使用Netty搭建WebSocket服务器 1.WebSocketServer.java public class WebSocketServer { private final ChannelGro ...

  6. winform版本自动更新

    我们在使用软件的时候经常会遇到升级版本,这也是Winform程序的一个功能,今天就大概说下我是怎么实现的吧(代码有点不完美有小BUG,后面再说) 先说下我的思路:首先在打开程序的时候去拿到我之前在网站 ...

  7. java 判断一个字符串中的数字:是否为数字、是否包含数字、截取数字

    题外话: JavaScript中判断一个字符是否为数字,用函数:isDigit(); 一.判断一个字符串是否都为数字 package com.cmc.util; import java.util.re ...

  8. Vue实例的生命周期created和mounted的区别

    生命周期先上图 什么是生命周期 Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例 ...

  9. struts-2.3.24.1中的jar的详解

    Struts2.3.24.1核心Jar包详解 antlr-2.7.2.jar                    语言转换工具,它是接受词文法语言描述,并能产生识别这些语言的语句的程序的一种工具 a ...

  10. Linux下记录所有用户的登录和操作日志

    Linux下记录所有用户的登录和操作日志   一般我们可以用history命令来查看用户的操作记录,但是这个命令不能记录是哪个用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的 ...