当前位置: 首页 > news >正文

P1251 餐巾计划问题

P1251 餐巾计划问题

大意

一个餐厅在相继的 \(N\) 天里,每天需用的餐巾数不尽相同。假设第 \(i\) 天需要 \(r_i\) 块餐巾(\(i = 1, 2, \dots, N\))。餐厅可以购买新的餐巾,每块餐巾的费用为 \(p\) 分;或者把旧餐巾送到快洗部,洗一块需 \(m\) 天,其费用为 \(f\) 分;或者送到慢洗部,洗一块需 \(n\) 天(\(n \gt m\)),其费用为 \(s\) 分(\(s \lt f\))。每天结束时,餐厅必须决定将多少块脏的餐巾送到快洗部,多少块餐巾送到慢洗部,以及多少块保存起来延期送洗。但是每天洗好的餐巾和购买的新餐巾数之和,要满足当天的需求量。

思路

一道很好的费用流题目,我们做一下考虑。

最终,由于每天都需要 \(r_i\) 块餐巾布,那么最终我们的最大流一定是 \(\sum r_i\),但是由于题目中的条件导致我们一定能求出最大流为 \(\sum r_i\),主要的问题是费用最小,考虑如何建模。

首先每天我们首先要要求在这天开始的时候,有 \(r_i\) 块新餐巾,而经过使用,这些餐巾在这天结束的时候会变成脏餐巾,那么我们考虑拆点,将一天分为 \(in\)\(out\)\(in\) 表示每天开始的时候,\(out\) 表示每天结束的时候。

首先,我们需要向 \(i_{out}\) 注入脏餐巾,我们建立源点 \(S\),用来产生脏餐巾,容量为 \(r_i\),花费为 \(0\),其次我们建立汇点 \(T\) 用来接收干净的餐巾,那么由 \(i_{in}\)\(T\) 连容量为 \(r_i\) 花费为 \(0\) 的边。这样一来,如果最大流跑不满,就说明不可行。

接下来考虑题目中的约束,为了使得每天的 \(i_{out} \to T\) 的流量流满,其实就是满足题目中的每天买餐巾的需求,我们可以从源点 \(S\) 向每个 \(i_{in}\) 连容量为 \(\infty\),花费为 \(p\) 的边。

接下来是洗衣服的约束,我们只需要每天的 \(i_{out} \to {(i + m)}_{in}\) 容量为 \(\infty\),花费为 \(f\) 的边,\(i_{out} \to {(i + n)}_{in}\) 容量为 \(\infty\),花费为 \(s\) 的边。

这样一来,直接跑最小费用最大流即可。

代码

#include<bits/stdc++.h>
using namespace std;const int MAXN = 4005;
const int MAXM = 20005;
struct node{int u, v, nxt, c, w;
}e[MAXM * 2];int S, T;
int tot, h[MAXN], d[MAXN], pre[MAXN];
bool vis[MAXN];void init(){tot = 0;memset(h, -1, sizeof(h));
}void add(int u, int v, int c, int w){e[tot] = {u, v, h[u], c, w};h[u] = tot ++;e[tot] = {v, u, h[v], 0, -w};h[v] = tot ++;
}bool spfa(){memset(vis, 0, sizeof(vis));memset(d, 0x3f, sizeof(d));memset(pre, -1, sizeof(pre));queue<int> q;q.push(S);d[S] = 0;vis[S] = true;while(!q.empty()){int u = q.front();q.pop();vis[u] = false;for(int i = h[u];~i;i = e[i].nxt){int v = e[i].v;if(e[i].c > 0){if(d[v] > d[u] + e[i].w){d[v] = d[u] + e[i].w;pre[v] = i;if(!vis[v]){q.push(v);vis[v] = true;}}}}}return (d[T] != 0x3f3f3f3f);
}long long EK(){long long res = 0;while(spfa()){long long Min = 1e9;for(int i = T;i != S;i = e[pre[i]].u){Min = min(Min, (long long)e[pre[i]].c);}for(int i = T;i != S;i = e[pre[i]].u){e[pre[i]].c -= Min;e[pre[i] ^ 1].c += Min;res += e[pre[i]].w * Min;}}return res;
}int N;
int a[MAXN];
int p, m, f, n, s;int main(){ios::sync_with_stdio(0);cin.tie(0);
//    freopen("repair.in", "r", stdin);
//    freopen("repair.out", "w", stdout);cin >> N;init();for(int i = 1;i <= N;i ++){cin >> a[i];}S = 0, T = 2 * N + 1;cin >> p >> m >> f >> n >> s;for(int i = 1;i <= N;i ++){add(S, i + N, a[i], 0);add(S, i, 1e9, p);add(i, T, a[i], 0);if(i + 1 <= N){add(i + N, (i + 1) + N, 1e9, 0);}if(i + m <= N){add(i + N, (i + m), 1e9, f);}if(i + n <= N){add(i + N, (i + n), 1e9, s);}}cout << EK() << endl;return 0;
}
http://www.jsqmd.com/news/386897/

相关文章:

  • 2026年口碑好的工业洗地机/西安洗地机租赁帮我推荐几家源头厂家推荐 - 品牌宣传支持者
  • 2026收缩膜厂家推荐排行榜产能与专利双维度权威对比 - 爱采购寻源宝典
  • 2026玻璃钢储罐厂家推荐排行榜产能与专利双优企业权威解析 - 爱采购寻源宝典
  • 2026年知名的助眠负离子发生器/负离子发生器厂家推荐及选择指南 - 品牌宣传支持者
  • 2026彩钢围挡厂家推荐排行榜产能与专利双优企业领跑市场 - 爱采购寻源宝典
  • 2026年热门的九江养老院/江西养老规划哪家便宜 - 品牌宣传支持者
  • 2026玻璃纤维毡厂家推荐泰安鸿砼以产能、专利、环保三维度领跑行业 - 爱采购寻源宝典
  • 2026玻璃钢瓦厂家推荐广东省合高复材制造有限公司产能与专利双领先 - 爱采购寻源宝典
  • 2026年评价高的丙烯酸篮球场/枫木纹pvc篮球场怎么联系实用公司采购参考 - 品牌宣传支持者
  • 2026装配式围挡厂家推荐排行榜产能与质量双优的权威之选 - 爱采购寻源宝典
  • 2026聚氨酯密封胶厂家推荐河北科耀产能领先+专利护航+服务全面 - 爱采购寻源宝典
  • 2026阻火包厂家推荐排行榜产能、专利、服务三维度权威解析 - 爱采购寻源宝典
  • 大模型榜单周报(2026/02/15)
  • 『n8n』调整本地时间的方法
  • 2026复合散热器厂家推荐排行榜产能、专利、服务三维度权威解析 - 爱采购寻源宝典
  • 2026钢筋网片厂家推荐排行榜产能与专利双优企业领衔 - 爱采购寻源宝典
  • 2026耐火漆厂家推荐新乡市豫奥消防材料有限公司领衔(产能与专利双优) - 爱采购寻源宝典
  • 完整教程:哈希表的核心问题在于高效地将关键字映射到存储位置并妥善处理冲突
  • 2026年花灯采购注意事项与供应商选择,华景花灯/营销花灯/景区灯会/国风花灯/大型花灯/智能花灯,花灯制造厂家如何选 - 品牌推荐师
  • 基于改进蛇优化算法优化支持向量机的数据回归预测(GOSO - SVM)探索
  • 2026 预埋钢骨架 厂家推荐 权威榜单(产能规模+专利技术双领先) - 爱采购寻源宝典
  • 2026仿真植物厂家推荐排行榜产能、专利、环保三大维度权威解析 - 爱采购寻源宝典
  • 2026电线电缆厂家推荐排行榜产能、专利、服务三维度权威解析 - 爱采购寻源宝典
  • 综述不会写?9个AI论文工具深度测评:自考毕业论文写作必备神器
  • 2026穴位压力刺激贴厂家推荐排行榜产能与专利双维度权威评估 - 爱采购寻源宝典
  • 2026反应釜厂家推荐排行榜从产能规模到专利技术全方位对比 - 爱采购寻源宝典
  • 2026穴位贴敷治疗贴厂家推荐排行榜(产能+专利+质量三维度权威评估) - 爱采购寻源宝典
  • 纯电动汽车动力经济性仿真:Cruise 与 Simulink 联合仿真之路
  • 2026磁栅尺位移传感器厂家推荐排行榜产能与专利双维度权威解析 - 爱采购寻源宝典
  • 2026年质量好的酒店灯具定制/酒店灯具系统哪家靠谱制造厂家推荐 - 品牌宣传支持者