这次烹饪比赛有 4 4 道菜品,小黎需要一道一道地制作,因为大赛规定要完成一道菜品后才能完成下一道菜品。每道菜品都有一个配方。其中第 i 道菜的配方共包含 � � s i ​ 个步骤,完成每个步骤需要一些时间,可能不等,每个步骤的制作顺序可以随意调整。小黎只有两个灶台可以同时使用,菜品的每个步骤都只能在其中一个灶台上制作,一个灶台同一时间内只能进行一个步骤的制作。现在他想知道,在任意顺序制作的情况下,最短需要多长时间才能完成所有的菜品。c++

时间: 2024-03-23 14:38:12 浏览: 5
好的,下面是一个C++的实现,使用了动态规划的思想来解决这个问题: ```c++ #include <bits/stdc++.h> using namespace std; const int N = 15, M = 1 << N; const int INF = 1e9; int n; int s[N], t[N][N], f[M]; int main() { scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &s[i]); for (int j = 0; j < s[i]; j++) scanf("%d", &t[i][j]); } memset(f, 0x3f, sizeof f); f[0] = 0; for (int i = 0; i < (1 << n); i++) { int cnt = 0; for (int j = 0; j < n; j++) if (i >> j & 1) cnt += s[j]; for (int j = 0; j < n; j++) if (!(i >> j & 1)) { int cost = 0, k = 0; for (int u = 0; u < s[j]; u++) { int res = INF; for (int v = 0; v < n; v++) if ((i >> v & 1) && (k < cnt - s[v] || k >= cnt)) res = min(res, f[i ^ (1 << v)] + t[v][s[v] - 1] + cost); cost += t[j][u]; k++; f[i | (1 << j)] = min(f[i | (1 << j)], res + cost); } } } printf("%d\n", f[(1 << n) - 1]); return 0; } ``` 这里的状态表示为 $f[i]$,表示完成状态为 $i$ 的所有菜品需要的最短时间。根据题目的要求,我们需要在每个状态下,枚举下一步制作的菜品,然后计算出制作该菜品的最短时间,从而得到下一个状态的最短时间。其中,状态转移方程为: $$ f[i | (1 << j)] = \min\{f[i | (1 << j)], f[i \oplus (1 << v)] + t[v][s[v]-1] + cost\} $$ 其中,$i$ 表示当前的状态,$j$ 表示下一个要制作的菜品,$v$ 表示当前状态中已经完成的步骤所属的菜品,$cost$ 表示当前制作菜品 $j$ 的时间。 时间复杂度为 $O(3^n n^2)$。

相关推荐

最新推荐

recommend-type

Java开发案例-springboot-66-自定义starter-源代码+文档.rar

Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar
recommend-type

单家独院式别墅图纸D027-三层-12.80&10.50米-施工图.dwg

单家独院式别墅图纸D027-三层-12.80&10.50米-施工图.dwg
recommend-type

啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦

啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦
recommend-type

课程大作业基于Vue+PHP开发的简单问卷系统源码+使用说明.zip

【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 课程大作业基于Vue+PHP开发的简单问卷系统源码+使用说明.zip Project setup ``` npm install ``` ### Compiles and hot-reloads for development ``` npm run serve ``` ### Compiles and minifies for production ``` npm run build ``` ### Lints and fixes files ``` npm run lint ``` ### Customize configuration See [Configuration Reference](https://cli.vuejs.org/config/).
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依