BZOJ 1283 序列 费用流 网络流 线性规划
https://darkbzoj.cf/problem/1283
给出一个长度为N的正整数序列Ci,求一个子序列,使得原序列中任意长度为M的子串中被选出的元素不超过K(K,M<=100) 个,并且选出的元素之和最大。
http://www.cnblogs.com/137shoebills/p/8871648.html
↑和这道题一样
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=;
int n,m,k,S,T,SS;
struct nod{
int x,y,v,co,rev,next;
}e[*maxn];
int head[maxn]={},tot=;
int a[maxn]={};
void init(int x,int y,int v,int co){
e[++tot].x=x;e[tot].y=y;e[tot].v=v;e[tot].co=co;e[tot].rev=tot+;e[tot].next=head[x];head[x]=tot;
e[++tot].x=y;e[tot].y=x;e[tot].v=;e[tot].co=-co;e[tot].rev=tot-;e[tot].next=head[y];head[y]=tot;
}
queue<int>q;
int vis[maxn]={},fa[maxn]={},dis[maxn]={};
bool SPFA(){
memset(dis,,sizeof(dis));
memset(vis,,sizeof(vis));
memset(fa,,sizeof(fa));
q.push(S);vis[S]=;dis[S]=;
while(!q.empty()){
int x=q.front();q.pop();vis[x]=;
for(int i=head[x];i;i=e[i].next){
if(!e[i].v)continue;
if(dis[e[i].y]>dis[x]+e[i].co){
dis[e[i].y]=dis[x]+e[i].co;
fa[e[i].y]=i;
if(!vis[e[i].y]){
q.push(e[i].y);vis[e[i].y]=;
}
}
}
}
return fa[T];
}
int doit(){
int val=maxn,ans=;
for(int i=fa[T];i;i=fa[e[i].x])val=min(val,e[i].v);
for(int i=fa[T];i;i=fa[e[i].x]){
e[i].v-=val;e[e[i].rev].v+=val;ans+=e[i].co;
}
return ans;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
T=n+;S=T+;SS=S+;
for(int i=;i<=n;i++){
init(i,i+m>n?T:i+m,,-a[i]);
init(i,i+>n?T:i+,k,);
}
for(int i=;i<=m;i++)init(SS,i,maxn,);
init(S,SS,k,);
int ans=;
while(SPFA())ans-=doit();
printf("%d\n",ans);
return ;
}
BZOJ 1283 序列 费用流 网络流 线性规划的更多相关文章
- bzoj 1283 序列 - 费用流
题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求选出一些数使得原序列中每$m$个连续的数中不超过$K$个被选走.问最大的可能的和. 感觉建图好妙啊.. 考虑把问题转化成选$m$次数,每次 ...
- BZOJ 3130: [Sdoi2013]费用流 网络流 二分 最大流
https://www.lydsy.com/JudgeOnline/problem.php?id=3130 本来找费用流的题,权当复习一下网络流好了. 有点麻烦的是double,干脆判断大小或者二分增 ...
- BZOJ 3130: [Sdoi2013]费用流 网络流+二分
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1230 Solved: ...
- BZOJ 3130 [Sdoi2013]费用流 ——网络流
[题目分析] 很容易想到,可以把P放在流量最大的边上的时候最优. 所以二分网络流,判断什么时候可以达到最大流. 流量不一定是整数,所以需要实数二分,整数是会WA的. [代码] #include < ...
- BZOJ 1283: 序列 (最大费用流)
题意 有n个正整数,要选取里面的一些数,在保证每m个连续的数中最多选k个的情况下,使得得到的值最大. 分析 我们可以把问题先转化为选k次,每一次每m个数只能选一个.那么根据贪心的策略,每m个里一定会选 ...
- BZOJ 1283: 序列
1283: 序列 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 272 Solved: 151[Submit][Status][Discuss] D ...
- 费用流&网络流模版
费用流模版: #include<cstdio> #include<cstring> #include<queue> using namespace std; ;// ...
- BZOJ2673 [Wf2011]Chips Challenge 费用流 zkw费用流 网络流
https://darkbzoj.cf/problem/2673 有一个芯片,芯片上有N*N(1≤N≤40)个插槽,可以在里面装零件. 有些插槽不能装零件,有些插槽必须装零件,剩下的插槽随意. 要求装 ...
- BZOJ 1070 修车(费用流)
如果能想到费用流,这道题就是显然了. 要求所有人的等待平均时间最小,也就是所有人的总等待时间最小. 每辆车只需要修一次,所以s连每辆车容量为1,费用为0的边. 现在需要把每个人拆成n个点,把车和每个人 ...
随机推荐
- H5 键盘兼容性小结
H5 键盘兼容性小结 在 H5 项目中,我们会经常遇到页面中存在单个甚至多个 input/textarea 输入框与底部固定元素的布局情况.在 input/textarea 输入框获取焦点时,会自动触 ...
- 使用python开发一个能够计算带括号的复杂表达式的计算器(只支持加减乘除)
使用到了模块re,正则,字典等 # 实现简单的加减乘除括号等运算 # Calculator def calculator(expression): print(expression) import r ...
- 64_t7
texlive-ulqda-bin-svn13663.0-33.20160520.fc26.2..> 24-May-2017 15:57 33102 texlive-ulqda-doc-svn2 ...
- Mysql 监控性能状态 QPS/TPS【转】
QPS(Query per second) 每秒查询量 TPS(Transaction per second)每秒事务量 这是Mysql的两个重要性能指标,需要经常查看,和Mysql基准测试的结果对比 ...
- bzoj 1083 繁忙的都市
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1083 题解: 在bzoj里能遇到如此如此水的题真是不容易…… 乍一看好像有点吓人,其实是一 ...
- java 读取配置文件类
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; im ...
- springboot配置fastjson后端往前端传输格式化
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.Spri ...
- java 闭包与回调
闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域. 内部类是面向对象的闭包,因为它不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥有一个指向此外围类对象 ...
- MAC下安装MAMP后,mysql server无法启动
用MAC下载安装了MAMP,之前使用是很好没问题的,但是突然无法启动mysql server,检查日志,提示InnDB出错,然后删掉了/Application/MAMP/db/mysql56目录下的i ...
- js中的Object.seal()与Object.freeze()
关键字:seal, freeze, property descriptor. 1.Object.seal() 参考文档(2)中这样描述: The Object.seal() method seals ...