测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A17117. 侗族鼓楼游客规划

填空题 中等

题目描述

侗族鼓楼游客规划

题目描述

侗族鼓楼景区有 n 个观景台,编号 1~n,每个观景台有对应的游客承载量。景区规定:相邻观景台不能同时满员。现给出各观景台的最大承载量,需要计算景区最多能容纳的游客总数,合理规划观景台开放方案,保障游览安全。

输入格式

第一行输入一个整数 n(4≤n≤15),表示观景台数量;

第二行输入 n 个整数,依次为每个观景台的最大承载量(10≤承载量≤100)。

输出格式

输出一个整数,表示景区最多可容纳的游客总数。

参考答案

#include <iostream> #include <algorithm> using namespace std; int main() { int n; cin >> n; int a[20]; for(int i = 0; i < n; i++) { cin >> a[i]; } int dp[20] = {0}; dp[0] = a[0]; dp[1] = max(a[0], a[1]); for(int i = 2; i < n; i++) { dp[i] = max(dp[i-1], dp[i-2] + a[i]); } cout << dp[n-1] << endl; return 0; }

答案解析

将问题转化为在序列中选择若干不相邻位置的元素,使其和最大。使用动态规划,定义状态 dp[i] 表示前 i 个观景台能容纳的最大游客数。状态转移时,考虑第 i 个观景台是否开放:若开放,则不能开放第 i-1 个,即 dp[i] = dp[i-2] + capacity[i];若不开放,则继承 dp[i-1]。取两者较大值更新 dp[i]。初始化 dp[0] = 0,dp[1] = capacity[0]。从 i=2 开始递推至 n,最终结果为 dp[n]。

上一题 下一题