题目背景
随着春节假期来临,环球影城等热门主题游乐场成为大人孩子的经典过节选项,但巨大的人流也意味着排队成为游客最大的痛点,游乐场项目多、如何在有限的游玩时间内收获最大的快乐,是本期赛题要解决的问题
题目内容
官方提供「环球影城」、「上海迪士尼」、「香港迪士尼」、「广州长隆」四个热门游乐场地图(地图信息见下图list),地图中标注各项目的排队+游玩时间、视觉体验指数、刺激指数,每个项目最多玩一次,不考虑项目之间的交通时间
香港迪士尼
下图为娱乐内容:
数据表:
娱乐名称 | 排队+游玩时间(分钟) | 视觉体验指数(分) | 刺激指数(分) |
小小世界 | 50 | 7 | 2 |
星战极速穿梭 | 40 | 8 | 10 |
钢铁奇侠飞行之旅 | 40 | 10 | 7 |
雪岭滑雪橇 | 60 | 7 | 6 |
小熊维尼历险之旅 | 50 | 6 | 4 |
蚁侠与黄蜂女 | 35 | 6 | 7 |
魔雪奇幻之旅 | 60 | 10 | 8 |
冲天遥控车 | 60 | 5 | 10 |
迷离大宅 | 55 | 6 | 7 |
灰熊山极速矿车 | 85 | 7 | 10 |
这里的数据表使用的是xlsx来存储的,名称可以在代码中看到【disneyland_projects.xlsx】,注意如果使用的是AI提问记得上传数据文件。
获取最大刺激指数算和
规定时间内获取最大刺激指数的python解法
import pandas as pd # 文件确认和数据读取 try: data = pd.read_excel('disneyland_projects.xlsx') print("文件读取成功!") except Exception as e: print(f"文件读取失败:{e}") exit() # 时间转换 play_time = 5 * 60 # 5小时转换为分钟 # 动态规划算法应用 def knapsack(values, weights, capacity): n = len(values) dp = [[0 for _ in range(capacity + 1)] for _ in range(n + 1)] for i in range(1, n + 1): for w in range(1, capacity + 1): if weights[i - 1] <= w: dp[i][w] = max(dp[i - 1][w], dp[i - 1][w - weights[i - 1]] + values[i - 1]) else: dp[i][w] = dp[i - 1][w] selected_items = [] w = capacity for i in range(n, 0, -1): if dp[i][w] > dp[i - 1][w] and weights[i - 1] <= w: selected_items.append(i - 1) w -= weights[i - 1] return dp[n][capacity], [data.iloc[index]['娱乐名称'] for index in selected_items[::-1]] # 提取刺激指数和游玩时间 stimulation_indices = data['刺激指数(分)'].tolist() play_durations = data['排队+游玩时间(分钟)'].tolist() # 计算最大刺激指数和对应的项目组合 max_stimulation, projects_combination = knapsack(stimulation_indices, play_durations, play_time) # 结果输出 print(f"在限定时间内,最大的刺激指数总和为:{max_stimulation}") print(f"对应的娱乐项目组合为:{', '.join(projects_combination)}")
最终结果:
我们为您计算在5个小时内能达到最大刺激指数的项目组合。在限定时间内,最大的刺激指数总和为 49 。对应的娱乐项目组合为:星战极速穿梭, 钢铁奇侠飞行之旅, 蚁侠与黄蜂女, 魔雪奇幻之旅, 冲天遥控车, 迷离大宅。这个组合将为您带来最刺激的游玩体验。
获取最大视觉指数和
规定时间内获取最大视觉指数的python解法
import pandas as pd # 读取数据 df = pd.read_excel('disneyland_projects.xlsx') # 提取必要的信息 projects = df['娱乐名称'].tolist() times = df['排队+游玩时间(分钟)'].tolist() visual_scores = df['视觉体验指数(分)'].tolist() # 初始化动态规划表格 n = len(projects) T = 120 # 总时间 dp = [[0] * (T + 1) for _ in range(n + 1)] # 填充动态规划表格 for i in range(1, n + 1): for t in range(1, T + 1): if times[i - 1] <= t: dp[i][t] = max(dp[i - 1][t], dp[i - 1][t - times[i - 1]] + visual_scores[i - 1]) else: dp[i][t] = dp[i - 1][t] # 回溯找到选择的项目 selected_projects = [] t = T for i in range(n, 0, -1): if times[i - 1] <= t and dp[i][t] > dp[i - 1][t]: selected_projects.append(projects[i - 1]) t -= times[i - 1] # 输出结果 print(f"在{T}分钟内,您可以获得的最大视觉体验指数是:{dp[n][T]}分。") print(f"对应的娱乐项目组合是:{selected_projects[::-1]}。")
最终结果:
在限定的120分钟内,为了获得最大的视觉体验指数,推荐您选择以下娱乐项目组合:星战极速穿梭、钢铁奇侠飞行之旅和蚁侠与黄蜂女。这样的组合可以让您在120分钟内获得高达24分的视觉体验指数,为您的迪士尼之旅增添更多的视觉享受。
提问示例
1、游玩5个小时,玩哪些项目的组合刺激指数最大。
2、只有120分钟的时间,怎么玩视觉指数最大。
3、我现在只有4小时20分钟的时间,请问玩哪些项目最刺激?
这里别指望使用暴力,暴力是肯定超时的。
问题3结果:
在有限的4小时20分钟(即260分钟)内,若追求最大的刺激体验,推荐您选择以下娱乐项目:灰熊山极速矿车、迷离大宅、冲天遥控车和魔雪奇幻之旅。这些项目的组合将带给您高达44分的总刺激指数,让您在短暂的时间内充分感受到迪士尼乐园的惊险与刺激。