首页 > 其他分享 >子序列的最大优雅度

子序列的最大优雅度

时间:2023-08-10 15:44:38浏览次数:29  
标签:最大 int items long 优雅 序列 利润 贪心

给你一个长度为 n 的二维整数数组 items 和一个整数 k 。
items[i] = [profiti, categoryi],其中 profiti 和 categoryi 分别表示第 i 个项目的利润和类别
现定义 items 的 子序列的优雅度 可以用 total_profit + distinct_categories2 计算
从 items 所有长度为 k 的子序列中,找出最大优雅度

1. 反悔贪心

结果的值受利润和种类两个维度影响,我们可以先考虑一个维度,然后再对另一个维度进行贪心替换
先按利润从大到小排序,贪心取前k个值,并且记录类别和重复类别的利润
后面对可以增加种类的值进行替换,并且动态规划记录更新当下最大值

class Solution {
public:
    long long findMaximumElegance(vector<vector<int>>& items, int k) {
        //只能遍历一次,要么贪心、要么排序贪心
        int n = items.size();
        long long res = 0;
        long long total = 0;
        //先按利润从大到小排序
        sort(items.begin(), items.end(), [](const auto &a, const auto &b) {
            return a[0] > b[0];
        });
        unordered_set<int> vis;
        stack<int> duplicate;//重复类别的利润
        for(int i=0;i<n;i++){ //只需遍历一次
            int profit = items[i][0]; int category = items[i][1];
            if(i<k){//先贪心选中前k个
                total += profit;//计算总利润
                if(vis.count(category))
                    duplicate.push(profit);//非第一个的重复类别利润,后面用作替换
                vis.insert(category);
            }
            else if(!duplicate.empty()&&!vis.count(category)){//对于候选替换数,如果存在可替换的重复类别,且当前类别没出现过
                //进行替换
                vis.insert(category);
                total += profit - duplicate.top();
                duplicate.pop();
            }
            //动态规划,记录最大值
            res = max(res, total + (long long)vis.size()*(long long)vis.size());
        }
        return res;
    }
};

标签:最大,int,items,long,优雅,序列,利润,贪心
From: https://www.cnblogs.com/929code/p/17620511.html

相关文章

  • 外设移除区别/终端记录/重设密码/python测试/数据拷贝最大限度
    1.1【卸载】【弹出】【安全移除驱动器】区别【卸载】只是解除挂载(可以直接重新挂载)【弹出】弹出读卡器里面的存储卡(需要重新插入存储卡)【安全移除驱动器】断掉设备电源,移除设备(需要重新插入设备)1.2记录你的终端操作──script   (点击详细)如果过程不是很长,一屏以内的话一......
  • 序列学习
    序列学习生活中的所有事物都是与时间相关的,也就形成了一个序列。为了对序列数据(文本、演讲、视频等)我们可以使用神经网络并导入整个序列,但是这样我们的数据输入尺寸是固定的,局限性就很明显。如果重要的时序特征事件恰好落在输入窗以外,就会产生更大的问题。所以我们需要的是:......
  • Python用GARCH对ADBL股票价格时间序列趋势滚动预测、损失、可视化分析
    全文链接:https://tecdat.cn/?p=33398原文出处:拓端数据部落公众号金融市场的股票价格时间序列分析一直以来都是投资者和研究者关注的主题之一。准确预测股票价格的趋势对于制定有效的投资策略和决策具有重要意义。因此,许多研究人员使用各种统计方法和模型来分析和预测股票价格的......
  • LeetCode从算法到算命—1749.任意子数组和的绝对值的最大值
    1749.任意子数组和的绝对值的最大值题目信息给你一个整数数组nums。一个子数组[numsl,numsl+1,...,numsr-1,numsr]的和的绝对值为abs(numsl+numsl+1+...+numsr-1+numsr)。请你找出nums中和的绝对值最大的任意子数组(可能为空),并返回该最大值。abs(x)......
  • 序列化
    什么是序列化我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。为什么要序列化1.持久保存状态需知一个软件/程序的执行就在处理一系列状态的变化,在编程语言中,'状......
  • delphi 自带的JSON序列化类
    unitUnit1;interfaceusesWinapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,Vcl.Dialogs,System.JSON.Serializers,Vcl.StdCtrls;typeTForm1=class(TForm)Memo1:TMemo......
  • Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)
    Vulhub-Docker-Composefileforvulnerabilityenvironment1、介绍名称:WeblogicWLSCoreComponents反序列化命令执行漏洞(CVE-2018-2628)编号:CVE-2018-2628原理:应用:Weblogic 版本:Weblogic10.3.6.0,Weblogic12.1.3.0,Weblogic12.2.1.2,Weblogic12.2.1.32、测试2.......
  • QComboBox在ubuntu下不显示滚动条问题,下拉框出现位置不固定问题,设置显示最大数量不生
    这里的Ubuntu指的是银河麒麟,问题也是在麒麟下出现的。没有在Ubuntu试过是否有同样的问题。但是估计也差不多,毕竟国产系统跟Ubuntu本来就纠缠不清。用QT写了一个QComboBox,自定义了一些样式,在Windows下显示正常,但是在Ubuntu下不显示滚动条,下拉框位置根据当前选项变化而不是固定显示......
  • Atcoder ABC307_G-Approximate Equalization 序列dp
    AT_ABC307_G-ApproximateEqualization没想到还有ApproximateEqualizationII!!:AT_ABC313_CDescription:给定一个长度为\(N\)的数列:\(A=(A_1,A_2,···,A_N)\),有两种操作可以以任意顺序进行任意多次(可以为0):\(A[i]-\)=\(1\)且\(A[i+1]+\)=\(1\),\((1\leqi\leqN-1)......
  • 史上最大电池!小米智能家庭屏Pro 8图赏
    今天小米智能家庭屏Pro8正式开售,集智能家居中控,智能网关以及娱乐教育三大功能为一体,首发749元。它是一款全新的智能生态产品中控屏,配备了7500mAh大容量电池以及通用性更好的USBType-C充电接口。还搭载了最新MIUIHome操作系统,让米家智能生态产品的控制集中化。现在这款新品已......