[codeforces724e]Goods transportation 解题报告
来源:互联网 发布:阿里云 域名解析到网址 编辑:程序博客网 时间:2024/05/01 03:26
这题好神呀。
首先这是一个网络流模型,考虑每个点都向编号比它大的点连一条容量为c的边,然后如果
但是这个图太大了,不能直接跑最大流,也无法优化。
所以我们可以转而考虑最小割,我们发现如果我们知道了割中的点是哪些,其实是可以直接算出割的大小的。
所以如果设f(i,j)表示前i个点,S中有j个的最小割。那么
代码:
#include<stdio.h>#include<iostream>using namespace std;#include<algorithm>const int N=1e4+5;int p[N],s[N];typedef long long LL;LL f[N];int main(){ //cout<<(sizeof(rest)>>20)<<endl; //freopen("cf724e.in","r",stdin); int n,c; scanf("%d%d",&n,&c); for(int i=1;i<=n;++i)scanf("%d",p+i); for(int i=1;i<=n;++i)scanf("%d",s+i); LL ans=0; for(int i=1;i<=n;++i) { ans+=min(s[i],p[i]); if(s[i]<=p[i])f[i]=f[i-1]; else f[i]=f[i-1]+s[i]-p[i]; for(int j=i-1;j>=0;--j) if(s[i]<=p[i]) { f[j]+=p[i]-s[i]+(LL)j*c; if(j)f[j]=min(f[j],f[j-1]); } else{ f[j]+=(LL)j*c; if(j)f[j]=min(f[j],f[j-1]+s[i]-p[i]); } //for(int j=0;j<=i;++j)printf("f(%d,%d)=%I64d\n",i,j,f[j]); } cout<<(ans+*min_element(f,f+n+1))<<endl;}
总结:
①。。感觉经常想不到网络流呢。什么样的题要用网络流呢?也许是方案非常复杂的那种吧,就像这道题。所以如果感觉方案很鬼畜难以统计就考虑一下网络流吧!
②注意最大流与最小割的转化。
0 0
- [codeforces724e]Goods transportation 解题报告
- Goods transportation
- 1797 Heavy Transportation 解题报告
- ZOJ 2541 Goods Transportation
- 最大生成树POJ1797Heavy Transportation解题报告
- [CF 724E]Goods transportation
- codeforces 724E. Goods transportation
- POJ 1797 Heavy Transportation(Dijkstra变形) 解题报告
- CodeForces 724E(Goods transportation 最小割)
- 【CF 724E】Goods transportation(最小割+DP)
- POJ3228 Gold Transportation 解题报告【贪心+并查集=Kruskal?】
- poj 3228 Gold Transportation 最小生成树+带权并查集 解题报告
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) E. Goods transportation 动态规划
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- DescriptionResourcePathLocationType Cannot change version of project facet Dynamic Web Module to
- CodeForces 132C Logo Turtle 四维DP 递推
- Voucher Key 相关SELinux
- iOS简单直播实现(二:推流)
- 进程管理实验
- [codeforces724e]Goods transportation 解题报告
- 三子棋的C语言实现
- 【JZOJ4807】破解
- 集合入门介绍第四章——Map集合
- Tomcat项目跨域问题(Tomcat7)
- java排序
- Android Studio下导入百度地图Demo
- iOS简单直播实现(三:IJKMediaFramework拉流)
- java在一个字符串前面插入另一个字符串的方法