1283: 序列

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 272  Solved: 151
[Submit][Status][Discuss]

Description

给出一个长度为 的正整数序列Ci,求一个子序列,使得原序列中任意长度为 的子串中被选出的元素不超过K(K,M<=100) 个,并且选出的元素之和最大。

Input

第1行三个数N,m,k。 接下来N行,每行一个字符串表示Ci。

Output

最大和。

Sample Input

10 5 3
4 4 4 6 6 6 6 6 4 4

Sample Output

30

HINT

20%的数据:n<=10。
100%的数据:N<=1000,k,m<=100。Ci<=20000。

Source

[Submit][Status][Discuss]

最大费用最大流

设立一个源点,一个汇点,源点向1连$<s,1,k,0>$的边(分别是出点,入点,流量,费用),n向汇点连$<n,t,k,0>$的边,1到n也用$<i,i+1,k,0>$的边连起来,限制最多流过k个流量。

1到n每个点$i$向$i+m$连一条$<i,i+m,1,num_{i}>$的边,表示选择这个数字,下次该流最少需要在$i+m$点之后选择下一个选择的数字。如果$i+m \gt n$,就向汇点连。

 #include <bits/stdc++.h>

 const int inf = 1e9;
const int siz = ; int n, m, k, num[siz]; int s, t;
int hd[siz];
int to[siz];
int fl[siz];
int vl[siz];
int nt[siz]; inline void add(int u, int v, int f, int w)
{
static int edge = , init = ;
if (init)memset(hd, -, sizeof(hd)), init = ;
nt[edge] = hd[u]; to[edge] = v; fl[edge] = f; vl[edge] = +w; hd[u] = edge++;
nt[edge] = hd[v]; to[edge] = u; fl[edge] = ; vl[edge] = -w; hd[v] = edge++;
} int pre[siz];
int dis[siz]; inline bool spfa(void)
{
static int que[siz], inq[siz], head, tail;
for (int i = s; i <= t; ++i)dis[i] = -inf;
memset(inq, , sizeof(inq));
head = , tail = ;
que[tail++] = s;
pre[s] = -;
dis[s] = ; while (head != tail)
{
int u = que[head++], v; inq[u] = ; for (int i = hd[u]; ~i; i = nt[i])
if (dis[v = to[i]] < dis[u] + vl[i] && fl[i]) {
dis[v] = dis[u] + vl[i], pre[v] = i ^ ;
if (!inq[v])inq[que[tail++] = v] = ;
}
} return dis[t] > -inf;
} inline int maxCost(void)
{
int cost = ; while (spfa())
{
int flow = inf; for (int i = pre[t]; ~i; i = pre[to[i]])
if (flow > fl[i ^ ])flow = fl[i ^ ]; for (int i = pre[t]; ~i; i = pre[to[i]])
fl[i] += flow, fl[i ^ ] -= flow; cost += flow * dis[t];
} return cost;
} signed main(void)
{
scanf("%d%d%d", &n, &m, &k); for (int i = ; i <= n; ++i)
scanf("%d", num + i); s = , t = n + ; add(s, , k, );
add(n, t, k, ); for (int i = ; i < n; ++i)
add(i, i + , k, ); for (int i = ; i <= n; ++i)
if (i + m <= n)
add(i, i + m, , num[i]);
else
add(i, t, , num[i]); printf("%d\n", maxCost());
}

@Author: YouSiki

BZOJ 1283: 序列的更多相关文章

  1. bzoj 1283 序列 - 费用流

    题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求选出一些数使得原序列中每$m$个连续的数中不超过$K$个被选走.问最大的可能的和. 感觉建图好妙啊.. 考虑把问题转化成选$m$次数,每次 ...

  2. BZOJ 1283 序列 费用流 网络流 线性规划

    https://darkbzoj.cf/problem/1283 给出一个长度为N的正整数序列Ci,求一个子序列,使得原序列中任意长度为M的子串中被选出的元素不超过K(K,M<=100) 个,并 ...

  3. BZOJ 1283: 序列 (最大费用流)

    题意 有n个正整数,要选取里面的一些数,在保证每m个连续的数中最多选k个的情况下,使得得到的值最大. 分析 我们可以把问题先转化为选k次,每一次每m个数只能选一个.那么根据贪心的策略,每m个里一定会选 ...

  4. BZOJ 1251 序列终结者(Splay)

    题目大意 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术 ...

  5. [bzoj]2962序列操作

    [bzoj]2962序列操作 标签: 线段树 题目链接 题意 给你一串序列,要你维护三个操作: 1.区间加法 2.区间取相反数 3.区间内任意选k个数相乘的积 题解 第三个操作看起来一脸懵逼啊. 其实 ...

  6. bzoj 1858 序列操作

    bzoj 1858 序列操作 带有随机多个区间单值覆盖的区间操作题,可考虑用珂朵莉树解决. #include<bits/stdc++.h> using namespace std; #de ...

  7. BZOJ 1251: 序列终结者 [splay]

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3778  Solved: 1583[Submit][Status][Discu ...

  8. BZOJ 1251: 序列终结者

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 3773  Solved: 1579 [Submit][Status][Dis ...

  9. Bzoj 4403: 序列统计 Lucas定理,组合数学,数论

    4403: 序列统计 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 328  Solved: 162[Submit][Status][Discuss] ...

随机推荐

  1. Python构建web应用(进阶版)->对网页HTML优化逻辑显示

    本篇是承接上一篇web应用(入门级)的内容往下顺延的,阅读后将会了解HTML逻辑显示优化,如下图所示,从杂乱无章的日志文件到一个整齐的列表显示. —————————————————————————— ...

  2. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 78,050,512 milliseconds ago.

    今天访问已经架上服务器的网站,报错: Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet s ...

  3. Vue+webpack报错: listen EADDRINUSE: address already in use :::8080

    如果本地运行多个vue+webpack项目会报错:listen EADDRINUSE: address already in use :::8080: 提示含义:地址端口已经被占用 注:8080指的是 ...

  4. 记一次centos6升级salt-minion启动失败的问题

    记一次centos6升级salt-minion启动失败的问题 作者:耀耀 blog:https://www.liuyao.me 一.起因 升级Salt-minion后 使用/etc/init.d/sa ...

  5. JAVA开发环境的熟悉

    北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1352 姓名:马悦 学号:20135235 成绩: 指导教师:娄嘉鹏 实验日期:2015.4.13 实验密级: 预习程度 ...

  6. 《UML大战需求分析》-读后感三

    用例图是用来描述什么角色通过某某系统能做什么的图,用例图关注的是系统的外在表示想爱你.系统与人的交互系统与其他系统的交互,小人执行者就是角色,角色 是对系统使用者的抽象,一个角色可以代表多个具体的人而 ...

  7. Redis有序集内部实现原理分析(二)

    Redis技术交流群481804090 Redis:https://github.com/zwjlpeng/Redis_Deep_Read 本篇博文紧随上篇Redis有序集内部实现原理分析,在这篇博文 ...

  8. VS团队资源管理器(VS自带git)使用说明_使用VS自带git推送到远程存储库

    使用git存储库是相当好的习惯,每次码完代码就推送到远程存储库,万一不小心把本地代码搞废了,或者硬盘坏了,或者中了勒索病毒,本地代码丢失了还能从服务器上下载.我曾经就中了一次勒索病毒,本地电脑上的所有 ...

  9. 累计进度条 PSP 饼图

    累计进度条   PSP   饼图 每周例行报告 本周PSP 类别 任务 开始时间 结束时间 被打断时间 总计工作时间 2016年9月24日 读书 构建之法-6.7章 19:00 20:00 2 58m ...

  10. HDU 2140 Michael Scofield's letter

    http://acm.hdu.edu.cn/showproblem.php?pid=2140 Problem Description I believe many people are the fan ...