[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]是不下降的.也就是说学姐每天的工资只会越来越多, 不 ...
随机推荐
- CSData
NSString 转换成NSData 对象 NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncodin ...
- javascript动态添加、修改、删除对象的属性与方法
在其他语言中,对象一旦生成,就不可更改了,要为一个对象添加修改成员必须要在对应的类中修改,并重新实例化,而且程序必须经过重新编译.JavaScript 中却非如此,它提供了灵活的机制来修改对象的行为, ...
- jeecms
===标签=== <!-- 显示一级栏目对应的二级栏目 --> <!-- [@cms_channel_list parentId=c.id] [#if tag_list?size&g ...
- http请求响应格式
当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:l 请求方法URI协议/版本l 请求头(Request Header)l 请求正 ...
- vueshengmingzhouqi
首先,每个Vue实例在被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期.首先看一张图吧~这是官方文档上的图片相信大家一定都会很熟悉: 可以看到在vue一整个的生命周期中会有很多钩子函 ...
- codevs 2853 方格游戏--棋盘dp
方格游戏:http://codevs.cn/problem/2853/ 这和传纸条和noip方格取数这两个题有一定的相似性,当第一眼看到的时候我们就会想到设计$dp[i][j][k][l]$(i,j表 ...
- InnoDB INFORMATION_SCHEMA FULLTEXT Index Tables
InnoDB INFORMATION_SCHEMA FULLTEXT Index Tables 下表提供了FULLTEXT索引的元数据: mysql> SHOW TABLES FROM INFO ...
- linux破解root登录密码,并重置
重启系统后按'e'键,进入编辑模式,在'UTF -8'后空格输入'rd.break'后,按快捷键'Ctrl+X'进入新界面进行编辑,代码如下: switch_root:/# mount -o remo ...
- js中表格的相关操作
tHead:表头 tBodies:表格正文 tFoot:表格尾 rows:行 cells:列 表格的应用: 1.获取 2.表格创建 3.隔行变色 4.删除一行 <!DOCTYPE html> ...
- LeetCode(18)4Sum
题目 Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = ...