照惯例CF的题不放原题链接。。。

题意:一个序列上有n个点,每个点有权值pi和si。表示这个点一开始有pi个物品,最多可以卖出si个物品,每个点都可以把物品向编号更大的点运输,但是对于i < j的任意点对(i, j)最多从i到j运c个物品。求最多能卖出多少个物品。

题解:

  如果不考虑数据范围的话,可以直接用网络流建图。s向每个点连流量为pi的边,表示一开始有pi的流量,每个点i向满足i < j的点j连流量为c的边,表示最多运送c个物品,每个点向t连流量为si的边,表示最多可以卖si个物品。

  最大流即为答案。

  但是这题数据范围过大,无法用网络流跑过,观察到这个图比较特殊,即如果我们知道了哪些点属于S集合(S在残余网络中可以到达的点),哪些点属于T集合,就可以直接算出最小割。

  即$ans = \sum_{i \in S}{s_{i}} + \sum_{i \in T}{p_{i}} + \sum_{i \in S}\sum_{j \in T}{c}$

  解释一下为什么是这样,应该是比较好理解的,从最小割这个角度来理解。

  如果一个点属于S,那么它肯定要断开与t的边,所以加上$s_{i}$,

  如果一个点属于T,那么它肯定要断开与s的边,所以加上$p_{i}$,

  如果一个点属于S,另一个点属于T,那么这两个点之间的边肯定要断开。

  因此我们设f[i][j]表示前i个点有j个属于S集的最小代价。

  那么如果这个点i我们划分到S集合里面,我们就加上$s_{i}$的代价。

  否则加上$p[i] + j \cdot c$的代价,$j \cdot c$表示这个点要与之前被划分到S集合里面的j个点都断开联系,因为边权都是c,所以代价就是$j \cdot c$.

  转移的时候注意一下j从0开始枚举。

 #include<bits/stdc++.h>
using namespace std;
#define R register int
#define AC 10010
#define LL long long int n;
LL c, ans = 1e18;
LL f[][AC], s[AC], p[AC]; inline int read()
{
int x = ;char c = getchar();
while(c > '' || c < '') c = getchar();
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x;
} inline void upmin(LL &a, LL b){
if(b < a) a = b;
} void pre()
{
n = read(), c = read();
for(R i = ; i <= n; i ++) p[i] = read();
for(R i = ; i <= n; i ++) s[i] = read();
} void work()
{
int now = ;
for(R i = ; i <= n; i ++)
{
now ^= ;
memset(f[now], , sizeof(f[now]));
for(R j = ; j <= i; j ++)
if(!j) f[now][j] = f[now ^ ][j] + p[i];
else f[now][j] = min(f[now ^ ][j] + p[i] + j * c, f[now ^ ][j - ] + s[i]);
}
for(R i = ; i <= n; i ++) upmin(ans, f[now][i]);
printf("%lld\n", ans);
} int main()
{
freopen("in.in", "r", stdin);
pre();
work();
fclose(stdin);
return ;
}

CF724E Goods transportation 最小割 DP的更多相关文章

  1. CF724E Goods transportation

    最大流既视感 然后 TLEMLE既视感 然后 最大流=最小割 然后 dp[i][j]前i个点j个点在S集合,最小割 然后 dp[i][j]=min(dp[i-1][j]+p[i]+j*c,dp[i-1 ...

  2. 最小割dp Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) E

    http://codeforces.com/contest/724/problem/E 题目大意:有n个城市,每个城市有pi件商品,最多能出售si件商品,对于任意一队城市i,j,其中i<j,可以 ...

  3. 【BZOJ4155】[Ipsc2015]Humble Captains 最小割+DP

    [BZOJ4155][Ipsc2015]Humble Captains Description 每天下午放学时都有n个zky冲出教室去搞基.搞基的zky们分成两队,编号为1的zky是1号队的首领,编号 ...

  4. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) E - Goods transportation 最大流转最小割转dp

    E - Goods transportation 思路:这个最大流-> 最小割->dp好巧妙哦. #include<bits/stdc++.h> #define LL long ...

  5. Codeforces 724E Goods transportation(最小割转DP)

    [题目链接] http://codeforces.com/problemset/problem/724/E [题目大意] 每个城市有pi的物品可以运出去卖,si个物品可以买, 编号小的城市可以往编号大 ...

  6. CodeForces E. Goods transportation【最大流+dp最小割】

    妙啊 首先暴力建图跑最大流非常简单,s向每个i连流量为p[i]的边,每个i向t连流量为s[i]的边,每个i向j连流量为c的边(i<j),但是会又T又M 考虑最大流=最小割 然后dp求最小割,设f ...

  7. HDU1565 方格取数(1) —— 状压DP or 插头DP(轮廓线更新) or 二分图点带权最大独立集(最小割最大流)

    题目链接:https://vjudge.net/problem/HDU-1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Memory L ...

  8. Wannafly挑战赛26-F-msc的棋盘[最小割转化dp]

    题意 一个大小为 \(n*m\) 的棋盘,知道每一列放了多少棋子,求有多少摆放方案满足要求. \(n,m\leq 50\) . 分析 如果是求是否有方案的话可以考虑网络流,行列连边,列容量为 \(b_ ...

  9. Goods transportation

    Goods transportation time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

随机推荐

  1. 06003_redis在Linux上的安装

    1.redis-3.0.0.tar.gz下载链接:redis-3.0.0.tar.gz下载 密码:wpbu 2.安装redis编译的c环境,yum install gcc-c++ : 3.将redis ...

  2. 解决Entity Framework查询匿名对象后的跨域访问的一种方式

    在Entity Framework中,可以使用lambda表达式进行对数据的查询,而且可以将查询结果直接映射为对象或者对象列表,这极大的提高的开发速度,并且使数据层的数据更加方便处理和传递.但是很多时 ...

  3. vuecli结合eslint静态检查

    vuecli结合eslint静态检查 搭建vue项目开发可能选择vue-cli项目脚手架快速创建vue项目.(https://github.com/vuejs/vue-cli) 安装vue-cli n ...

  4. Java图片转字符

    很久都没有更新博客了,昨天下午一个朋友问我能不能将一张图片转换成字符画,然后我想我这个朋友不知道,也许有的朋友以不知道,我就简单的分享一下 package com.xsl.zhuanhuan; imp ...

  5. hdu1422重温世界杯(动态规划,最长子序列)

    重温世界杯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  6. CF245H Queries for Number of Palindromes

    题目描述 给你一个字符串s由小写字母组成,有q组询问,每组询问给你两个数,l和r,问在字符串区间l到r的字串中,包含多少回文串. 时空限制 5000ms,256MB 输入格式 第1行,给出s,s的长度 ...

  7. Git 简易食用指南 v2.0

    写在前面 一开始我们先聊一聊版本控制,什么是版本控制呢?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.具体大类分为: 本地版本控制系统 集中式版本控制系统SVN 分布式 ...

  8. POJ 2187 Beauty Contest(凸包+旋转卡壳)

    Description Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest, ea ...

  9. 并查集(Union/Find)模板及详解

    概念: 并查集是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题.一些常见的用途有求连通子图.求最小生成树的Kruskal 算法和求最近公共祖先等. 操作: 并查集的基本操作有两个 ...

  10. Thunder团队第一周 - Scrum会议3

    Scrum会议3 小组名称:Thunder 项目名称:在线考试系统 Scrum Master:杨梓瑞 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李 ...