LeetCode:八月份的两块披萨,给我整破防了

其他 · 2023-08-18 · 98 人浏览
LeetCode:八月份的两块披萨,给我整破防了

  谁都没有想到,谁都没有想到!在8月份LeetCode每日签到中出现了两块披萨的题目,一次比一次难今天这到题目更是给我整破防了😅

  首先在1444.切披萨的方案数中,你把披萨放上苹果是什么黑暗料理,OK直接暴力破解,一看不行52/54,OKOK行
最后参考灵茶山大佬的思路 通过动态规划+递归解决,解决思路给个链接。

详情可以参考:

作者:灵茶山艾府
链接:力扣(LeetCode)

( ¬、¬)
重量级的来了
第二天出现了1388 3n块披萨
题目如下:

给你一个披萨,它由 3n 块不同大小的部分组成,现在你和你的朋友们需要按照如下规则来分披萨:

你挑选 任意 一块披萨。
Alice 将会挑选你所选择的披萨逆时针方向的下一块披萨。
Bob 将会挑选你所选择的披萨顺时针方向的下一块披萨。
重复上述过程直到没有披萨剩下。
每一块披萨的大小按顺时针方向由循环数组 slices 表示。
( ¬、¬)
请你返回你可以获得的披萨大小总和的最大值。
( ¬、¬)
输入:slices = [1,2,3,4,5,6]
输出:10
解释:选择大小为 4 的披萨,Alice 和 Bob 分别挑选大小为 3 和 5 的披萨。然后你选择大小为 6 的披萨,Alice 和 Bob 分别挑选大小为 2 和 1 的披萨。你获得的披萨总大小为 4 + 6 = 10 。
( ¬、¬)
输入:slices = [8,9,8,6,1,1]
输出:16
解释:两轮都选大小为 8 的披萨。如果你选择大小为 9 的披萨,你的朋友们就会选择大小为 8 的披萨,这种情况下你的总和不是最大的。
( ¬、¬)
给出的提示是
1 <= slices.length <= 500
slices.length % 3 == 0
1 <= slices[i] <= 1000

又是你 又是困难披萨
但是 欸 动态规划!!
( ¬、¬)
思路:在一个3n的环形数组中,选择n个不相邻的数,让这个n个数的和最大
( ¬、¬)
因为对于java语言比较熟练所以使用的java
题解如下:

class Solution {
    public int maxSizeSlices(int[] slices) {
  return Math.max(maxSizeSlices(slices, 0, slices.length - 2), maxSizeSlices(slices, 1, slices.length - 1));
    }

    public int maxSizeSlices(int[] slices, int start, int end) {
        int m = end - start + 1;
        int pick = (m + 1) / 3;
        int[][] dp = new int[m + 1][pick + 1];
        for (int i = 1; i <= m; i++) {
            int size = slices[start + i - 1];
            for (int j = 1; j <= pick; j++) {
                int prevSize = i > 1 ? dp[i - 2][j - 1] : 0;
                dp[i][j] = Math.max(prevSize + size, dp[i - 1][j]);
            }
        }
        return dp[m][pick];
    }
}

相关的动态规划题目解决问题:213 打家劫舍 ( ¬、¬)

  然后也可以用双链表+后悔贪心算法+最大堆也可做出来,而且这种方法更好,但是我做不出来... 哈哈。最后困难题真的折磨😣

取消回复
  1. Justin_Wu 2023-09-02

    时隔三个月,大佬发言!!!

Theme Jasmine by Kent Liao

本网站由 又拍云 提供CDN加速/云存储服务

鄂ICP备2023005457号    鄂公网安备 42011302000815号