zoukankan      html  css  js  c++  java
  • LC 1388. Pizza With 3n Slices

    link

     题解:

    找n个互不相邻的披萨,求最大组合。若有两个相邻,a,b, 则吃a时b必须已经被吃掉,且是被自己吃掉;吃b时a必须已经被吃掉,且是被自己吃掉,矛盾,故互不相邻。

    下面证明n个互不相邻的披萨可以顺利吃完。n=1满足条件。设n-1满足条件。n个披萨之间gap有n个,且这些gap被2n个披萨填充,故平均每个gap有两个披萨。则必然存在一个gap上有两个披萨。首先吃这个gap旁边的披萨,可以保证剩下的n-1个披萨不会相邻。

    则问题转换为寻找n个不相邻的披萨,使得sum最大。注意0和3n-1不可同时取。故可以分两种情况,[0,3n-2], [1,3n-1]

    class Solution {
    public:
        int maxSizeSlices(vector<int>& slices) {
            int n=slices.size();
            int k=n/3;
            vector<vector<int>> dp(n,vector<int>(k+1,-1));
            int r1=dfs(0,n-2,slices,k,dp);
            
            dp=vector<vector<int>>(n,vector<int>(k+1,-1));
            int r2=dfs(1,n-1,slices,k,dp);
            return max(r1,r2);
        }
        
        int dfs(int idx, int right, vector<int>& slices, int k,  vector<vector<int>> &dp){
            if(k==0 || idx>right) return 0;
            
            if(dp[idx][k]!=-1) return dp[idx][k];
            
            return dp[idx][k]=max(slices[idx]+dfs(idx+2,right,slices,k-1,dp), dfs(idx+1,right,slices,k,dp));
        }
    };
  • 相关阅读:
    Ios8代码关闭输入预测问题
    iOS10 拍照崩溃问题
    iOS 圆的放大动画效果
    12-指针
    11-数组、字符串
    09-函数
    iOS 动画
    iOS 传值 委托(delegate)和block 对比
    IOS Table中Cell的重用reuse机制分析
    IOS 网络请求
  • 原文地址:https://www.cnblogs.com/FEIIEF/p/12546260.html
Copyright © 2011-2022 走看看