首页 > 其他分享 >1626. 无矛盾的最佳球队

1626. 无矛盾的最佳球队

时间:2023-04-08 23:55:06浏览次数:54  
标签:1626 int max cache curScore 最佳 球队 ans first

题目链接:1626. 无矛盾的最佳球队

方法一:子集型回溯 + 记忆化

解题思路

  1. 先对\(scores\)和\(ages\)数组进行预处理得到\(pair<int, int> a[n]\)数组,\(a[i].first = score[i], a[i].second = ages[i]\),然后进行\(sort\)排序;
  2. 枚举计算\([i, n - 1]\)区间的最大分数\(score_i\) \(= dfs(i),i = 0, 1, ..., n - 1\)。\(ans = max(score_i)\)。
  3. \(dfs(i)\):\(curScore = a[i].first\),以\(i\)为起点,在\([i + 1, n - 1]\)中找所有满足条件a[i].second <= a[j].second的\(j\),即找没有矛盾的的队员,\(curScore = max(dfs(j) + a[i].first, curScore)\),return curScore

代码

class Solution {
public:
    int bestTeamScore(vector<int>& scores, vector<int>& ages) {
        int n = scores.size(), ans = 0;
        pair<int, int> a[n];
        for (int i = 0; i < n; i ++ ) a[i] = {scores[i], ages[i]};
        sort(a, a + n);
        int cache[n]; memset(cache, -1, sizeof(cache));
        function<int(int)> dfs = [&](int i) -> int {
            int curScore = a[i].first;
            if (cache[i] != -1) return cache[i];
            for (int j = i + 1; j < n; j ++ ) {
                if (a[j].second >= a[i].second) {
                    curScore = max(curScore, dfs(j) + a[i].first);
                }
            }
            cache[i] = curScore;
            return curScore;
        };
        for (int i = 0; i < n; i ++ ) {
            ans = max(ans, dfs(i));
        }
        return ans;
    }
};

方法二:动态规划

解题思路

改写上方思路为动态规划:

  1. \(cache\)数组改为\(f\)数组;
  2. 递归改为循环。递归过程中是在起点的右边找不矛盾的队友,然后在向右递归;循环则是对应归的过程,即 \(i = n - 1 => 0\),\(f[i] = a[i].first\),然后在\(i\)的右边\([i + 1, n - 1]\)中找不矛盾的\(j\),\(f[i] = max(f[i], f[j] + a[i].first)\);
  3. \(ans = max(f)\)。

代码

class Solution {
public:
    int bestTeamScore(vector<int>& scores, vector<int>& ages) {
        int n = scores.size(), ans = 0;
        pair<int, int> a[n];
        for (int i = 0; i < n; i ++ ) a[i] = {scores[i], ages[i]};
        sort(a, a + n);
        int f[n]; memset(f, 0, sizeof(f));
        for (int i = n - 1; i >= 0; i -- ) {
            f[i] = a[i].first;
            for (int j = i; j < n; j ++ ) {
                if (a[j].second >= a[i].second) {
                    f[i] = max(f[i], f[j] + a[i].first);
                }
            }
            ans = max(ans, f[i]);    
        }
        return ans;
    }
};

复杂度分析

时间复杂度:\(O(n^2)\);
空间复杂度:\(O(n)\)。

标签:1626,int,max,cache,curScore,最佳,球队,ans,first
From: https://www.cnblogs.com/lxycoding/p/17299621.html

相关文章

  • bp神经网络交叉验证算法和确定最佳隐含层节点个数matlab 程序
    bp神经网络交叉验证算法和确定最佳隐含层节点个数matlab程序,直接运行即可。数据excel格式,注释清楚,效果清晰,一步上手。YID:6859628310735572......
  • 六条Prometheus最佳实践原则
    在Prometheus官网中对如何更好地使用该监控系统做了充分的说明,包括指标和标签命名、控制台和仪表盘、测量仪表、直方图和摘要、告警、用好PushGateway等。1.指标与标签的命名指标命名必须符合数据模型的有效字符。应该有一个与度量所属的域相关的应用程序前缀(客户端库函数有时将前......
  • 分库分表索引设计:二级索引、全局索引的最佳设计实践(建议收藏)
    大家好,我是飘渺。分布式数据库架构下,索引的设计也需要做调整,否则无法充分发挥分布式架构线性可扩展的优势。今天我们就来聊聊“在分布式数据库架构下,如何正确的设计索引?”主键选择对主键来说,要保证在所有分片中都唯一,它本质上就是一个全局唯一的索引。如果用大部分同学喜欢的自增......
  • 分享8个最佳的代码片段在线测试网站
    Itsourpleasuretosharebestresources/toolsforwebdevelopersanddesigner.Todaywearegoingtosharebestsitesfortestingcodesnippets,thesesitesprovidethebestplacewherewebdeveloperscantesttheircodefastandeasily.Overtheinterne......
  • 分布式追踪的最佳工具:SigNoz
    分布式追踪的最佳工具:SigNozvsJaeger参考链接分布式追踪的最佳工具:SigNozvsJaeger_devops_weixin_0010034-DevPress官方社区(csdn.net)开源可观测性平台SigNoz参考链接开源可观测性平台SigNoz_JAVA序码的博客-CSDN博客使用开源工具监控全栈Nodejs应用参考链接使用开源工具监......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-会议笔记文档智能转摘要从0到1快速入门——官
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 第二十三篇 最佳实践 - 可维护性
    bycaixin深圳可维护性在早期网站中,JavaScript主要用于实现一些小型动效或表单验证。今天的Web应用则动辄成千上万行JavaScript代码,用于完成各种各样复杂的处理。这些变化要求开发者把可维护能力放到重要位置上。正如更传统意义上的软件工程师一样,JavaScript工程师受雇......
  • 第二十四篇 最佳实践 - 性能
    bycaixin深圳前端性能优化最佳实践客户端性能、服务器端、网络性能1、页面内容减少HTTP请求数减少DNS查询避免重定向缓存Ajax请求延迟加载预先加载减少DOM元素数量划分内容到不同域名尽量减少iframe使用避免404错误2、服务器使用CDN添加Expi......
  • 旅游APP大数据分析:带你找到最佳旅游路线
    如今,旅游App已经成为了现代旅游的必备工具,而在这个数字化的时代,大数据的应用已经成为了旅游App的重要手段。本文将介绍旅游App大数据分析的应用,带你找到最佳旅游路线。一、大数据在旅游App中的应用随着互联网的发展和普及,旅游App已经成为了一个全球性的行业。而在这个行业中,大......
  • 第三十八篇 vue - 最佳实践 - 性能优化
    概述Vue在大多数常见场景下性能都是很优秀的,通常不需要手动优化。然而,总会有一些具有挑战性的场景需要进行针对性的微调。在本节中,我们将讨论用Vue开发的应用在性能方面该注意些什么首先,让我们区分一下web应用性能的两个主要方面1、页面加载性能首次访问时,应......