BZOJ 1283: 序列 最大费用费用流
来源:互联网 发布:苹果7数据 编辑:程序博客网 时间:2024/04/19 10:56
题意:给定一个长度为n的序列,要求选一些数,使得任意一个长度为m个区间中最多选k个数,求最大的和
解法: 论文上的题目 《浅析信息学中的“分”与“合”》
最大费用最大流
把这个序列用流量为k费用为0的边连成一条直线 然后第i个点向第i+m个点连一条费用为a[i]流量为1的边
跑最大费用最大流即可
反正具体看论文吧,注意论文是拆了点的,但是这个模型拆和不拆是等效的。
//BZOJ 1283 最大费用最大流#include <bits/stdc++.h>using namespace std;const int maxn = 1010;const int maxm = 100010;const int inf = 0x3f3f3f3f;struct node{ int st, en, flow, cost, next; node(){} node(int st, int en, int flow, int cost, int next) : st(st), en(en), flow(flow), cost(cost), next(next){}}E[maxm];int p[maxn], num;void init(){ memset(p, -1, sizeof(p)); num = 0;}void add(int st, int en, int flow, int cost){ E[num] = node(st,en,flow,cost,p[st]); p[st]=num++; E[num] = node(en,st,0,-cost,p[en]); p[en]=num++;}int pre[maxn], dis[maxn];bool fg[maxn];bool spfa(int st, int en){ for(int i=0; i<=en; i++) fg[i]=0, dis[i]=-1, pre[i]=-1; queue<int>q; q.push(st); fg[st]=1; dis[st]=1; while(!q.empty()){ int u = q.front(); q.pop(); fg[u]=0; for(int i=p[u];~i;i=E[i].next){ int v = E[i].en; if(E[i].flow&&dis[v]<dis[u]+E[i].cost){ dis[v] = dis[u]+E[i].cost; pre[v] = i; if(!fg[v]){ fg[v]=1; q.push(v); } } } } return dis[en] != -1;}int solve(int st, int en){ int ans = 0; while(spfa(st,en)) { int d = inf; for(int i = pre[en]; ~i; i = pre[E[i].st]) d = min(d, E[i].flow); for(int i = pre[en]; ~i; i = pre[E[i].st]){ ans += d * E[i].cost; E[i].flow -= d; E[i^1].flow += d; } } return ans;}int a[maxn];int main(){ int n, m, k; scanf("%d%d%d", &n,&m,&k); init(); int st, en; st = 0, en = n+1; for(int i=1; i<=n; i++){ scanf("%d",&a[i]); add(i-1,i,k,0); if(i+m<=n) add(i,i+m,1,a[i]); else add(i,en,1,a[i]); } int ans = solve(st, en); printf("%d\n", ans); return 0;}
0 0
- BZOJ 1283: 序列 最大费用费用流
- BZOJ 1283 序列 费用流
- bzoj 1283: 序列 费用流
- 1283: 序列|最大费用流
- bzoj 1283: 序列(费用流)
- bzoj 2661(最大费用流)
- BZOJ 1283 费用流
- BZOJ 4514 浅谈最大费用最大流
- 【BZOJ1283】序列【最大费用最大流】
- bzoj 2324(最小费用最大流)
- [最大费用最大流][DP][BZOJ 1930][SHOI2003]吃豆豆
- bzoj 3308: 九月的咖啡店(最大费用最大流)
- bzoj-3130 费用流
- bzoj 3130 费用流
- bzoj 2424(费用流)
- bzoj 3171(费用流)
- bzoj 2245(费用流)
- bzoj 1221(费用流)
- 随机函数小练习
- Xshell 终端显示中文乱码解决方法
- redis学习笔记七之发布订阅、编码格式
- tpshop商城敢用吗
- spring学习笔记
- BZOJ 1283: 序列 最大费用费用流
- 数据结构与算法之栈与队列
- AE音乐可视化教程
- centos7 安装 lnmp
- iptables常用命令及应用
- 搞懂树状数组一维(转), 二维(原创)
- assert()函数的用法
- 历届试题 买不到的数目 (蓝桥杯)
- 网络流讲解和基本实现