文章目录

  • 题目描述
  • 解析
  • 代码

题目描述

某软件公司正在规划一项nnn天的软件开发计划,根据开发计划第iii天需要nin_ini​个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供一块消毒毛巾,这种消毒毛巾使用一天后必须再做消毒处理后才能使用。

消毒方式有两种,A 种方式的消毒需要aaa天时间,B 种方式的消毒需要bbb天,A 种消毒方式的费用为每块毛巾faf_afa​,B 种消毒方式的费用为每块毛巾fbf_bfb​,而买一块新毛巾的费用为fff(新毛巾是已消毒的,当天可以使用)。公司经理正在规划在这nnn天中,每天买多少块新毛巾、每天送多少块毛巾进行 A 种消毒和每天送多少块毛巾进行 B 种消毒。当然,公司经理希望费用最低。

你的任务就是:为该软件公司计划每天买多少块毛巾、每天多少块毛巾进行 A 种消毒和多少毛巾进行 B 种消毒,使公司在这项nnn天的软件开发中,提供毛巾服务的总费用最低。

解析

关键是割点的思想
把每天割成早上和晚上两个点
晚上会得到nin_ini​条旧的毛巾
然后按照消毒方式往早上连边
注意当天的毛巾可以留到第二天

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2300;
const int M=2e6+100;
const int mod=998244353;
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();};while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
int n,m,s,t;
struct node{int to,nxt;ll cap,w;
}p[M<<1];
int fi[N],cnt,cur[N];
void addline(int x,int y,ll cap,ll w){p[++cnt]=(node){y,fi[x],cap,w};fi[x]=cnt;p[++cnt]=(node){x,fi[y],0,-w};fi[y]=cnt;
}
ll flow,cost;
queue<int>q;
ll dis[N];
bool vis[N];
bool spfa(){memset(dis,0x3f,sizeof(dis));memset(vis,0,sizeof(vis));dis[s]=0;q.push(s);bool flag=0;while(!q.empty()){int now=q.front();q.pop();vis[now]=0;for(int i=cur[now]=fi[now];~i;i=p[i].nxt){int to=p[i].to;if(!p[i].cap) continue;if(to==t) flag=1;if(dis[to]>dis[now]+p[i].w){dis[to]=dis[now]+p[i].w;if(!vis[to]){q.push(to);vis[to]=1;}}}}return flag;
}
ll dfs(int x,ll lim){if(x==t||!lim){cost+=lim*dis[t];return lim;}vis[x]=1;ll res=0;for(int &i=cur[x];~i;i=p[i].nxt){int to=p[i].to;if(vis[to]||!p[i].cap||dis[to]!=dis[x]+p[i].w) continue;ll add=dfs(to,min(lim,p[i].cap));res+=add;lim-=add;p[i].cap-=add;p[i^1].cap+=add;if(!lim) break;}if(lim) dis[x]=-1;vis[x]=0;return res;
}
void dinic(){while(spfa()){while(ll tmp=dfs(s,2e18)){flow+=tmp;//printf("tmp=%d\n",tmp);}}return;
}
int x;
int fa,fb,a,b,f;
int main(){memset(fi,-1,sizeof(fi));cnt=-1;n=read();a=read();b=read();f=read();fa=read();fb=read();s=n+1;t=s+1;a++;b++;s=n+n+1;t=n+n+2;for(int i=1;i<=n;i++){x=read();addline(s,i+n,x,0);addline(i,t,x,0);}for(int i=1;i<=n;i++) addline(s,i,2e18,f);for(int i=1;i<n;i++) addline(i+n,i+1+n,2e18,0);for(int i=1;i+a<=n;i++) addline(i+n,i+a,2e18,fa);for(int i=1;i+b<=n;i++) addline(i+n,i+b,2e18,fb);dinic();printf("%lld",cost);return 0;
}

YBTOJ洛谷P2223:软件开发(费用流)相关推荐

  1. 洛谷P3980 志愿者招募——费用流

    洛谷P3980 [NOI2008]志愿者招募--费用流 题目介绍 题目描述 输入格式 输出格式 测试样例 题解 代码 题目介绍 题目描述 链接: 传送门. 申奥成功后,布布经过不懈努力,终于成为奥组委 ...

  2. 洛谷 P4015 运输问题(费用流)

    运输问题 题目描述 W W W 公司有 m m m 个仓库和 n n n 个零售商店.第 i i i 个仓库有 a i a_i ai​ 个单位的货物:第 j j j 个零售商店需要 b j b_j b ...

  3. 开工大吉!祝低代码软件开发公司流辰信息财源广进、步步高升!

    正月初七,正值玉兔送福之际,低代码软件开发公司迎来了开工大吉的喜庆日子.在浓浓的新年氛围中,流辰信息迎来了正式开工的日子,流辰人在一片喜气洋洋的新年贺声中来开了兔年出征的辉煌序幕. 值此开工大吉之日, ...

  4. 软件开发平台流辰信息如何为客户分忧解难?

    在数字化信息越来越丰富的今天,作为软件开发平台服务商,流辰信息如何为客户提质增产.降本增效?又凭什么为客户分忧解难,创造更大的价值? 一.以产品研发及创新为动力,夯实发展根基 俗语云:真金不怕火炼.是 ...

  5. 家园 / 星际转移问题(洛谷P2754 分层图+最大流)

    再一次感觉网络流太神奇了qwq 题目链接:[星际转移问题](P4009 汽车加油行驶问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)) 受到之前那道[汽车加油行驶问题](P400 ...

  6. YBTOJ洛谷P4074:糖果公园(树上莫队)

    文章目录 解析 update: 代码 所谓树上莫队,就是在树上的莫队 (逃) 传送门 解析 似乎就是树上的这道题 考虑如何转化为序列问题呢? 考虑dfs序 但是又一个问题... 似乎这条链的dfs序不 ...

  7. YBTOJ洛谷P4551:最长异或路径(trie树)

    洛谷传送门 文章目录 题目描述 解析 代码 题目描述 解析 本题关键就在于一点: 若把每个点的深度dep[i]定义为从根到节点边权的异或和 那么i到j的路径异或和可以表示为: dep[i] ^ dep ...

  8. [SCOI2007]修车,洛谷P2053,最小费用最大流

    正题 给出m个师傅,n台车,并给出每个师傅各个车的时间,现在要使得,n辆车一起来,等待时间最短. 我们来观察一个师傅所消耗的等待时间.m个师傅所消耗的总等待时间就是车主的总等待时间. 对于第a个师傅, ...

  9. 洛谷4014最大/小费用最大流

    题目:https://www.luogu.org/problemnew/show/P4014 #include<iostream> #include<cstdio> #incl ...

最新文章

  1. 动态代理——事务处理
  2. pg 10 wal 归档同步配置
  3. 使用intellij idea打开以前用maven的包
  4. Elasticsearch的智能判断:动态添加数据映射
  5. della计算机驱动检测,nexus6安装BPTOOLS中的diag驱动图文教程
  6. 牛客网NC112--进制转换
  7. 关于Panel隐藏横向滚动条
  8. GridView类容器中的DropDownList联动
  9. .net mysql操作类_ASP.NET数据库操作类实例
  10. java partialfunction,scala中方法和函数的区别
  11. iptraf:一个实用的TCP/UDP网络监控工具
  12. ACM PKU 1019 Number Sequence http://acm.pku.edu.cn/JudgeOnline/problem?id=1019
  13. Houdini技术体系大纲
  14. Linux命令——set 和 unset
  15. 记录一下这几天写专利的日子
  16. 计算机图学与工业设计,工业设计和工程制图的关系
  17. 【180630】VC++画面炫丽的2D 太空射击游戏源码
  18. 计网自顶向下 学习笔记:Chap1
  19. 很牛的求职历程和经验(二)
  20. Gazebo模型制作dae

热门文章

  1. z变换公式表_如何使用标准正态分布表?
  2. 求职学习笔记|并发编程知识点常见问题总结(一)
  3. 网学天地计算机组成与原理试题,哈工大2007年秋季学期计算机组成原理期末试题...
  4. html5 获取文件属性,H5新属性--file文件读取
  5. oracle数据缓冲区作用,Oracle内存结构(02)--缓冲区
  6. java实现网页保存_详解Java两种方式简单实现:爬取网页并且保存
  7. 解决Spring boot整合mybatis,xml资源文件放置及路径配置问题
  8. webpack入门核心知识还看不过瘾?速来围观万字入门进阶知识
  9. 堆栈的定义与操作-顺序存储,链式存储(C语言)
  10. [Java基础]Stream流的收集操作