2024年华为OD机试真题-分披萨

华为OD机试真题-分披萨-2024年OD统一考试(D卷)

题目描述:

“吃货”和“馋嘴”两人到披萨店点了一份铁盘(圆形)披萨,并嘱咐店员将披萨按放射状切成大小相同的偶数扇形小块。但是粗心服务员将披萨切成了每块大小都完全不同奇数块,且肉眼能分辨出大小。

由于两人都想吃到最多的披萨,他们商量了一个他们认为公平的分法:从“吃货”开始,轮流取披萨。除了第一块披萨可以任意选取以外,其他都必须从缺口开始选。

他俩选披萨的思路不同。“馋嘴”每次都会选最大块的披萨,而且“吃货”知道“馋嘴”的想法。

已知披萨小块的数量以及每块的大小,求“吃货”能分得的最大的披萨大小的总和。

输入描述:

第1行为一个正整数奇数N,表示披萨小块数量。3 <= N < 500。

接下来的第2行到第N+1行(共N行),每行为一个正整数,表示第i块披萨的大小。1 <= i <= N。披萨小块从某一块开始,按照一个方向依次顺序编号为1~N。每块披萨的大小范围为[1, 2147483647]。

输出描述:

“吃货”能分得的最大的披萨大小的总和。

补充说明:

示例1

输入:

5

8

2

10

5

7

输出:

19

说明:

此例子中,有5块披萨。每块大小依次为8、2、10、5、7。按照如下顺序拿披萨,可以使“吃货”拿到最多披萨:

1、“吃货”拿大小为10的披萨

2、“馋嘴”拿大小为5的披萨

3、“吃货”拿大小为7的披萨

4、“馋嘴”拿大小为8的披萨

5、“吃货”拿大小为2的披萨

至此,披萨瓜分完毕,“吃货”拿到的披萨总大小为10+7+2=19。

可能存在多种拿法,以上只是其中一种。

解题思路:

使用动态规划的思路,区间dp,按照题目意思操作即可。注意2点,一是给dp长度翻倍来满足循环数组要求,当然也可以多开一维来表示区间的方向性(顺时针、逆时针),二是注意开longlong。 

c++解法:

#include<bits/stdc++.h>
#define int long long
using namespace std;
 
int n, m;
signed main()
{
    cin >> n;  // 读取披萨块数
    int top = 1e18;  // 用一个很大的数来初始化动态规划数组中的最小值
    vector<int> v(2 * n);  // 创建一个数组存放披萨大小,长度为2n,方便处理环状结构
    vector<vector<int>> dp(2 * n + 5, vector<int>(2 * n + 5, -top));  // 创建动态规划数组
 
    for (int i = 0; i < n; i++) {
        cin >> v[i];  // 读取每块披萨的大小
        v[n + i] = v[i];  // 复制数组以模拟环形结构
    }
 
    int ans = 0;  // 初始化“吃货”可以获得的最大披萨大小总和
    for (int len = 1; len <= n; len += 2) {  // 由于要求奇数块,所以len步长为2
        for (int l = 0, r = len - 1; r < 2 * n; l++, r++) {  // 遍历所有可能的起点和长度为len的区间
            if (len == 1) {
                dp[l][r] = v[l];  // 如果区间长度为1,直接取当前位置的值
            } else {
                // 状态转移方程,考虑拿左端或右端的披萨
                dp[l][r] = max(dp[l][r - 1] + v[r], dp[l + 1][r] + v[l]);
            }
            if (len == n) {
                ans = max(ans, dp[l][r]);  // 如果区间长度等于n,更新“吃货”可能得到的最大总和
            }
            // 维护环形结构中的区间拓展
            if (l == 0 || r == 2 * n - 1)
                continue;
            if (v[l - 1] > v[r + 1])
                dp[l - 1][r] = max(dp[l - 1][r], dp[l][r]);
            else
                dp[l][r + 1] = max(dp[l][

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

华为OD机试题库2024年 文章被收录于专栏

2024年OD统一考试(D卷),最新最完整题库。 收录130+道真题,提供解题思路,Java/Python/C++三种答案源码。

全部评论

相关推荐

4 3 评论
分享
牛客网
牛客企业服务