题目链接

  学了一下上下界费用流,似乎很nb。但是我说得不好,所以这里给出博客链接。

  某dalao的博客

  然后这道题的解法就是先用上下界费用流的建图方式连早上和晚上之间的那条边,保证当天一定会有r条或以上的餐巾可用。

  然后考虑买,快洗,慢洗和放起来的诸多情况。

  

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cctype>
#include<queue>
#define maxn 5030
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} struct Edge{
int from,next,to,val,dis;
}edge[maxn*];
int head[maxn],num;
inline void addedge(int from,int to,int val,int dis){
edge[++num]=(Edge){from,head[from],to,val,dis};
head[from]=num;
}
inline void add(int from,int to,int val,int dis){
addedge(from,to,val,dis);
addedge(to,from,,-dis);
} inline int count(int i){ return i&?i+:i-; } int dis[maxn];
int pre[maxn];
bool vis[maxn];
int flow[maxn];
int Start,End; int spfa(){
memset(dis,/,sizeof(dis)); int pinf=dis[];
dis[Start]=; flow[Start]=0x7fffffff;
queue<int>q; q.push(Start);
while(!q.empty()){
int from=q.front(); q.pop(); vis[from]=;
for(int i=head[from];i;i=edge[i].next){
int to=edge[i].to;
if(edge[i].val==||dis[to]<=dis[from]+edge[i].dis) continue;
dis[to]=dis[from]+edge[i].dis;
pre[to]=i; flow[to]=min(flow[from],edge[i].val);
if(vis[to]) continue;
vis[to]=; q.push(to);
}
}
if(dis[End]==pinf) return ;
int now=End;
while(now!=Start){
int ret=pre[now];
edge[ret].val-=flow[End]; edge[count(ret)].val+=flow[End];
now=edge[ret].from;
}
return (long long)dis[End]*flow[End];
} int r[maxn]; int main(){
int N=read(); End=N*+;
for(int i=;i<=N;++i){
r[i]=read();
add(Start,i+N,r[i],);
add(i,End,r[i],);
add(i,i+N,0x7fffffff,);
}
int p=read(),m=read(),f=read(),n=read(),s=read();
for(int i=;i<=N;++i){
add(Start,i,0x7fffffff,p);
if(i!=N) add(i,i+,0x7fffffff,);
if(i+m>N) continue;
add(i+N,i+m,0x7fffffff,f);
if(i+n>N) continue;
add(i+N,i+n,0x7fffffff,s); }
long long ans=;
while(){
long long now=spfa();
if(now==) break;
ans+=now;
}
printf("%lld\n",ans);
return ;
}

https://www.luogu.org/problemnew/show/P1251

最新文章

  1. angular服务一
  2. SQL Server出现错误: 4014
  3. 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
  4. 增强VPS SSH账号安全:改端口,禁用Root,密钥登录,Denyhosts防暴力攻击
  5. Ajax调用SpringMVC ModelAndView 无返回情况
  6. python将文件写成csv文件保存到本地
  7. DLUTOJ 1142 高中的公式
  8. Linux C C语言库的创建和调用
  9. iOS图片拉伸技巧—— resizableImageWithCapInsets
  10. UDP聊天实现(简单版)
  11. cocos2d(CCSprite 用贝塞尔做抛物线,足球精灵并且同时做旋转放大效果)
  12. jQuery后续...
  13. MySQL系列(一)--基础知识大总结
  14. 【.net 深呼吸】自己动手来写应用程序设置类
  15. TensorFlow Serving-TensorFlow 服务
  16. UNIX网络编程——原始套接字的魔力【下】
  17. 修改GDAL库支持RPC像方改正模型
  18. Vue路由学习笔记
  19. SpringMVC系列(五)使用 Serlvet 原生的 API 作为目标方法的参数
  20. kubernetes实战(二十五):kubeadm 安装 高可用 k8s v1.13.x

热门文章

  1. 洛谷 P1001 A+B Problem
  2. oracle的clob转换varchar2
  3. Oracle中ROWID详解
  4. 分类回归树(CART)
  5. CPP-基础:新标准 C++iostream
  6. pbr 5.2.1需使用中科大的源,豆瓣的不行
  7. iOS中的数据存储方式_Preference(NSUserDefaults)
  8. Docker 在容器中部署静态网站
  9. leetcode-5-basic
  10. Latex:插入伪代码