[vijos1891]学姐的逛街计划
学姐的逛街计划
描述
doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课.
偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天.
doc 很忧伤, 因为他还要陪学姐去逛街呢.
后来, doc发现, 如果自己哪一天智商更高一些, 陪学姐逛街会得到更多的好感度.
现在 doc 决定做一个实验来验证自己的猜想, 他拜托 小岛 预测出了 自己 未来 3n 天中, 每一天的智商.
doc 希望在之后的 3n 天中选出一些日子来陪学姐逛街, 要求在不违反校规的情况下, 陪学姐逛街的日子自己智商的总和最大.
可是, 究竟这个和最大能是多少呢?
格式
输入格式
第一行给出两个整数, n 和 k, 表示我们需要设计之后 3n 天的逛街计划, 且任意连续 n 天中不能请假超过 k 天.
第二行给出 3n 个整数, 依次表示 doc 每一天的智商有多少. 所有数据均为64位无符号整数
输出格式
输出只有一个整数, 表示可以取到的最大智商和.
样例1
样例输入1
样例输出1
限制
对于 20% 的数据, 1 <= n <= 12 , k = 3.
对于 70% 的数据, 1 <= n <= 40 .
对于 100% 的数据, 1 <= n <= 200 , 1 <= k <= 10.
#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int N = 1e4;
const int M = 4e5;
const int INF = 0x3f3f3f3f;
using namespace std;
struct Edge
{
int from, to, cap, flow, cost, next;
};
Edge edge[M];
int head[N], inde,pre[N], dist[N];
bool vis[N];
int n,k;
void init()
{
inde = ;
memset(head, -, sizeof(head));
}
void AddEdge(int u, int v, int w, int c)
{
Edge E1 = {u, v, w, , c, head[u]};
edge[inde] = E1;
head[u] = inde++;
Edge E2 = {v, u, , , -c, head[v]};
edge[inde] = E2;
head[v] = inde++;
}
bool SPFA(int s, int t)
{
queue<int> Q;
memset(dist, INF, sizeof(dist));
memset(vis, false, sizeof(vis));
memset(pre, -, sizeof(pre));
dist[s] = ;
vis[s] = true;
Q.push(s);
while(!Q.empty())
{
int u = Q.front();
Q.pop();
vis[u] = false;
for(int i = head[u]; i != -; i = edge[i].next)
{
Edge E = edge[i];
if(dist[E.to] > dist[u] + E.cost && E.cap > E.flow)
{
dist[E.to] = dist[u] + E.cost;
pre[E.to] = i;
if(!vis[E.to])
{
vis[E.to] = true;
Q.push(E.to);
}
}
}
}
return pre[t] != -;
}
void MCMF(int s, int t, int &cost, int &flow)
{
flow = ;
cost = ;
while(SPFA(s, t))
{
int Min = INF;
for(int i = pre[t]; i != -; i = pre[edge[i^].to])
{
Edge E = edge[i];
Min = min(Min, E.cap - E.flow);
}
for(int i = pre[t]; i != -; i = pre[edge[i^].to])
{
edge[i].flow += Min;
edge[i^].flow -= Min;
cost += edge[i].cost * Min;
}
flow += Min;
}
}
int cnt,s,t;
int node[],val[];
int st[],en[];
void getMap(){
s = ++cnt;t = ++cnt;
for(int i = ;i <= n * + ;i++){
node[i] = ++cnt;
}for(int i = ;i <= * n;i++)scanf("%d",&val[i]);
AddEdge(s,node[],k,);
AddEdge(node[n * + ],t,k,);
for(int i = ;i <= n;i++)st[i] = node[];
for(int i = n + ;i <= * n;i++)st[i] = node[i - n + ];
for(int i = ;i <= * n;i++)en[i] = node[i + ];
for(int i = * n + ;i <= * n;i++)en[i] = node[n * + ];
for(int i = ;i <= * n;i++)AddEdge(st[i],en[i],,-val[i]);
for(int i = ;i <= * n + ;i++)AddEdge(node[i],node[i + ],k,);
}
int main()
{
scanf("%d %d",&n,&k);
init();
getMap();
int cost, flow;
MCMF(s,t, cost, flow);
printf("%d\n",-cost);
return ;
}
[vijos1891]学姐的逛街计划的更多相关文章
- Vijos1891 学姐的逛街计划 【费用流】*
Vijos1891 学姐的逛街计划 描述 doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课. 偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天. doc 很忧伤, ...
- vijos1891 学姐的逛街计划(线性规划)
P1891学姐的逛街计划 描述 doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课.偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天. doc 很忧伤, 因为他还要陪 ...
- 刷题总结——学姐的逛街计划(vijos1891费用流)
题目: doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课.偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天. doc 很忧伤, 因为他还要陪学姐去逛街呢. 后来, ...
- Vijos 学姐的逛街计划
传送门 题解传送门 线性规划,最小费用最大流. 神奇的操作. //Achen #include<algorithm> #include<iostream> #include&l ...
- Vijos1901 学姐的钱包
描述 学姐每次出门逛街都要带恰好M元钱, 不过她今天却忘记带钱包了.可怜的doc只好自己凑钱给学姐, 但是他口袋里只有一元钱.好在doc的N位朋友们都特别有钱, 他们答应与doc作一些交换.其中第i位 ...
- cdoj 1328 卿学姐与诡异村庄 Label:并查集 || 二分图染色
卿学姐与诡异村庄 Time Limit: 4500/1500MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- cdoj 1329 卿学姐与魔法 优先队列
卿学姐与魔法 Time Limit: 1200/800MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...
- cdoj 1324 卿学姐与公主 线段树裸题
卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- vijosP1903学姐的实习工资
描述 学姐去实习了, 一共实习了N天, 每一天都可以得到实习工资V[i], 这里V[1..N]被看作是整数序列.因为学姐很厉害, 所以V[1..N]是不下降的.也就是说学姐每天的工资只会越来越多, 不 ...
随机推荐
- 洛谷 P1507 NASA的食物计划
题目背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安 全技术问题一直大伤脑筋,因此在各方压力下终止了航天 飞机的历史,但是此类事情会不会在以后发生,谁也无法 保证,在遇到这类航天问题时,解 ...
- 螺旋数字的python实现
螺旋数字的算法简单实现. 示例 5 01 02 03 04 05 16 17 18 19 06 15 24 25 20 07 14 23 22 21 08 13 12 11 10 09 通过观察,外部 ...
- MVC之在实例中的应用
MVC模式在Java Web应用程序中的实例分析 1. 结合六个基本质量属性 1)可用性 2)可修改性 3)性能 4)安全性 5)可测试性 6)易用性 2. 分析具体功能模块的MVC设计实现(例如登录 ...
- Android(java)学习笔记163:开发一个多界面的应用程序之界面间数据传递
1.界面跳转的数据传递 (1)intent.setData() --> intent.getData(): 传递的数据比较简单,一般是文本类型的数据String:倘若我们传递的数据比较复 ...
- iOS端架构、基本组成与使用说明
一. app整体描述 app的描述:需求文档+接口文档+程序架构. 说明:新入手的开发人员必须拿到这三个说明文档才能整体了解app功能. 二.app架构描述 1.架构视图 2.分层结构说明 [1] a ...
- 世平信息(W 笔试)
选择题 大题 1.启动Thread的方法有几种 算法题 1.写出冒泡排序算法
- ProxyFactory
Spring定义了org.springframework.aop.framework.AopProxy接口,并提供了两个final类型的实现类. AopProxy类结构:
- gcc编译问题
gcc avl.o hash.o list.o rb.o example.o -o 123.exe 多个.o输出 exe -c和-o都是gcc编译器的可选参数.-c表示只编译(compile)源文件但 ...
- 什么是session?
Session一般译作会话.从不同的层面看待session,它有着类似但不全然相同的含义.比如,在web应用的用户看来,他打开浏览器访问一个电子商务网站,登录.并完成购物直到关闭浏览器,这是一个会话. ...
- 前端 (cookie )页面进入存储一次
<!--引入jq--> <script> var isShowTip = window.sessionStorage.getItem("isShow") ...