m[i][n] 表示第n年、具有i年经验的人数(i=0表示新学徒,i=1,2表示不同经验年数的学徒,i=3表示3年及以上的师傅)。关于递推关系,以下哪个是错误的?题目描述:
刺绣(如苏绣、湘绣等)是珍贵的非物质文化遗产,其技艺通过"师傅带徒弟"的方式代代相传。假设某刺绣流派的传承规律如下:
- 第1年:只有1位创始师傅(经验 >= 3年)
- 每年年末统计一次人员变化
- 每位拥有3年及以上经验的艺人(师傅),每年培养 1 名新学徒(经验 = 0年)
- 学徒每年积累1年经验:0年经验 → 1年经验 → 2年经验 → 3年及以上经验(成为师傅)
- 艺人终身从事该技艺,不会退出
请使用递推算法,计算第 n 年时该流派的总从业人数。
输入格式:
输出格式:
示例输入1:
1
示例输出1:
1
示例输入2:
7
示例输出2:
10
示例输入3:
10
示例输出3:
26
递推提示:
定义四个数组:m0(新学徒)、m1(1年经验)、m2(2年经验)、m3(3年及以上经验/师傅)。
递推关系:
- m0[n] = m3[n-1](新学徒由师傅培养)
- m1[n] = m0[n-1](去年新学徒晋升)
- m2[n] = m1[n-1](1年学徒晋升)
- m3[n] = m3[n-1] + m2[n-1](师傅保留 + 2年学徒晋升为师傅)
- 总人数 = m0[n] + m1[n] + m2[n] + m3[n]
示例输入:
示例输出:
题目描述:
风筝制作是国家级非物质文化遗产。某风筝工坊准备制作一批风筝,工匠有三种材料库存:竹条、纸张、颜料。工坊有 n 种风筝设计方案,每种方案需要消耗一定数量的材料,并带来相应的"艺术评分"。每种方案最多制作 1 个风筝。请使用枚举算法,在材料总量允许的前提下,找出总艺术评分最高的方案组合。
输入格式:
- 第一行:四个整数,空格分隔,依次为 n(方案数量,1 <= n <= 12)以及三种材料的库存量 A、B、C
- 接下来 n 行:每行四个整数,空格分隔,依次为该方案需要的竹条数、纸张数、颜料数和艺术评分
输出格式:
- 第一行:最大总评分:{评分}
- 第二行:选择方案编号:{编号列表,空格分隔}(编号从1开始,按升序排列)
- 如果有多种方案组合得到相同的最大评分,输出编号列表字典序最小的那个
示例输入:
2 1 1 8
1 2 1 6
3 3 2 15
1 1 2 5
示例输出:
选择方案编号:1 3
样例说明:
- 库存:竹条5、纸张5、颜料5
- 方案1:竹2纸1颜料1评8;方案2:竹1纸2颜料1评6;方案3:竹3纸3颜料2评15;方案4:竹1纸1颜料2评5
- 枚举所有 2^4=16 种组合。选择方案1+3:竹条2+3=5,纸张1+3=4,颜料1+2=3,均未超库存,总评分8+15=23(最优)
算法提示:枚举从 0 到 2^n-1 的所有整数,每个整数的二进制位表示对应方案是否被选中。检查每种组合的材料用量是否在库存范围内,更新最大评分。
题目描述:
木雕艺术是中华民族的传统手工艺。一位木雕艺人创作了 n 块风格各异的木雕作品,编号为 1 到 n,每块木雕有一个"风格值",其数值即为其编号(即木雕 i 的风格值为 i)。现要将这 n 块木雕排列成一行展示,要求相邻两块木雕的风格值之和必须为质数。
请使用DFS回溯算法,找出所有满足条件的排列方案,并输出方案总数和所有方案(按字典序升序排列)。
输入格式:
输出格式:
- 第一行:共{方案数}种排列方案
- 接下来每行输出一种方案,格式为数字空格分隔(如 1 4 3 2 5)
- 方案按字典序升序排列
示例输入:
示例输出:
1 4 3 2 5
3 4 1 2 5
5 2 1 4 3
5 2 3 4 1
样例说明:
对于 n=5,风格值为 1~5。检查相邻之和是否为质数:
- 方案 "1 4 3 2 5":1+4=5(质)、4+3=7(质)、3+2=5(质)、2+5=7(质),全部满足
- 方案 "3 4 1 2 5":3+4=7(质)、4+1=5(质)、1+2=3(质)、2+5=7(质),全部满足
- 方案 "5 2 1 4 3":5+2=7(质)、2+1=3(质)、1+4=5(质)、4+3=7(质),全部满足
- 方案 "5 2 3 4 1":5+2=7(质)、2+3=5(质)、3+4=7(质)、4+1=5(质),全部满足
共4种方案,按字典序升序排列。
算法提示:
1. 预处理:先生成所有 <= 2n 的质数集合,便于快速判断
2. DFS回溯:使用
used[] 数组标记哪些数字已被使用,path 列表存储当前排列3. 递归终止条件:
path 长度等于 n 时,记录一个有效方案4. 剪枝:在选择下一个数字时,检查它与
path 中最后一个数字的和是否为质数题目描述:
某非遗文化节设有 m 个互动体验摊位,编号为 1 到 m。第 i 号摊位的体验时长为 t[i] 分钟(体验一旦开始不可中断)。每个摊位同一时间只能容纳 1 位游客体验。
共有 n 位报名游客,按报名顺序编号为 1 到 n。游客 j 在时刻 arrive[j] 分钟到达文化节现场,希望体验编号为 want[j] 的摊位。
请编写模拟程序,模拟文化节的运行过程,规则如下:
1. 游客到达后,如果其心仪的摊位处于空闲状态,且该摊位的等待队列为空,则立即开始体验
2. 游客到达后,如果其心仪的摊位正被占用或等待队列非空,则该游客加入该摊位的等待队列(按到达时间先后排队)
3. 当摊位完成一次体验时,立即检查等待队列:如果队列非空,选择队列中最早到达的游客开始体验;如果队列为空,摊位恢复空闲状态
4. 所有游客都不会中途离开,最终所有游客都会完成体验
输入格式:
- 第一行:两个整数 m 和 n(1 <= m <= 10, 1 <= n <= 100),空格分隔
- 第二行:m 个整数,表示每个摊位的体验时长(单位:分钟),空格分隔
- 接下来 n 行:每行两个整数,表示游客的到达时刻 arrive[j] 和心仪摊位编号 want[j],空格分隔。到达时刻按非递减顺序给出(即 arrive[1] <= arrive[2] <= ... <= arrive[n])
输出格式:
- 每位游客一行信息:游客{j}:到达{到达时刻} 摊位{摊位号} 开始{开始时刻} 结束{结束时刻}(j 从1开始)
- 一个空行
- 每个摊位一行:摊位{i}服务人次:{人次}(i 从1开始)
示例输入:
10 15
0 1
3 1
5 2
8 1
示例输出:
游客2:到达3 摊位1 开始10 结束20
游客3:到达5 摊位2 开始5 结束20
游客4:到达8 摊位1 开始20 结束30
摊位1服务人次:3
摊位2服务人次:1
样例说明:
- 时刻0:游客1到达,1号摊位空闲且队列为空,开始体验,结束于0+10=10
- 时刻3:游客2到达,1号摊位被占用(游客1在10结束),加入1号等待队列:[2]
- 时刻5:游客3到达,2号摊位空闲且队列为空,开始体验,结束于5+15=20
- 时刻8:游客4到达,1号摊位被占用,加入1号等待队列:[2, 4]
- 时刻10:1号摊位完成游客1,从等待队列取游客2开始体验,结束于10+10=20
- 时刻20:1号摊位完成游客2,从等待队列取游客4开始体验,结束于20+10=30
- 时刻20:2号摊位完成游客3,等待队列为空,恢复空闲
- 时刻30:1号摊位完成游客4,等待队列为空,恢复空闲