首页 > 其他 > 详细

CF724E Goods transportation

时间:2020-04-22 12:05:47      阅读:53      评论:0      收藏:0      [点我收藏+]

Goods transportation

有 ?? 座城市,第 ?? 座城市会生产 ???? 商品,可以卖出 ???? 商品。

对于一对城市 ??,??(?? < ??),?? 可以向 ?? 运输不超过 ??(对于所有 ??,?? 均相同)的商品。

求最多能卖出多少商品。

?? ≤ 10000。

题解

显然有一个网络流模型,源点向第 ?? 个点连容量为 ???? 的边,第 ?? 个点向汇点连容量为 ???? 的边,第 ?? 个点向第 ?? (?? < ??) 个点连容量为 ?? 的边,求个最大流。

但是跑得很慢。

考虑最大流等于最小割。

??[??][??] 表示前 ?? 个点,有 ?? 个点属于 ?? 集合的最小割为多少。

枚举第 ?? 个点属于 ?? 集还是 ?? 集转移。属于\(S\)集合只需要断它连向\(T\)的边,属于\(T\)集合不仅要断\(S\)连向它的边,还要断前面属于\(S\)集合的点连向它的边。

复杂度 ??(??2)。

CO int N=1e4+10;
CO int64 inf=1e18;
int64 c,s[N],t[N];
int64 dp[2][N];

int main(){
	int n=read<int>();
	read(c);
	for(int i=1;i<=n;++i) read(s[i]);
	for(int i=1;i<=n;++i) read(t[i]);
	for(int i=1;i<=n;++i){
		dp[i&1][0]=dp[(i-1)&1][0]+s[i],dp[i&1][i+1]=inf;
		for(int j=1;j<=i;++j)
			dp[i&1][j]=min(dp[(i-1)&1][j]+c*j+s[i],dp[(i-1)&1][j-1]+t[i]);
	}
	int64 ans=inf;
	for(int i=0;i<=n;++i) ans=min(ans,dp[n&1][i]);
	printf("%lld\n",ans);
	return 0;
}

CF724E Goods transportation

原文:https://www.cnblogs.com/autoint/p/12750912.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!