[Algorithm][综合训练][比那名居的桃子][chika和蜜柑][礼物的最大价值]详细讲解

server/2024/9/23 9:31:28/

目录


1.比那名居的桃子

1.题目链接


2.算法原理详解 && 代码实现

  • 自己的版本:暴力解法 --> 超时 37.5%
    #include <iostream>
    #include <vector>
    using namespace std;int main()
    {int n = 0, k = 0;cin >> n >> k;vector<int> happy(n, 0), shame(n, 0);for(int i = 0; i < n; i++){cin >> happy[i];}for(int i = 0; i < n; i++){cin >> shame[i];}vector<vector<int>> ret(n, vector<int>(2, 0));for(int i = 0; i < n; i++) // 枚举每个起点{for(int j = 0; j < k; j++){if(i + j < n){ret[i][0] += happy[i + j];ret[i][1] += shame[i + j];}}}int day = 0, happyMax = 0;for(int i = 0; i < n; i++){// 目标是:尽可能多的快乐值if(happyMax < ret[i][0]){happyMax = ret[i][0];day = i;}// 快乐值相等 -->  尽可能少的羞耻度if(happyMax == ret[i][0]){if(ret[i][1] < ret[day][1]){day = i;}}// 快乐值 == 羞耻度 -->  尽可能早的吃桃子// 不更新值就可以}cout << day + 1<< endl;return 0;
    }
    
  • 优化版本1:滑动窗口
    #include <iostream>
    #include <vector>
    using namespace std;int main()
    {int n = 0, k = 0;cin >> n >> k;vector<int> happy(n, 0), shame(n, 0);for(int i = 0; i < n; i++){cin >> happy[i];}for(int i = 0; i < n; i++){cin >> shame[i];}int left = 0, right = 0;long long hSum = 0, sSum = 0, hMax = 0, sMin = 0, begin = 0;while(right < n){hSum += happy[right];sSum += shame[right];while(right - left + 1 > k){hSum -= happy[left];sSum -= shame[left];left++;}if(right - left + 1 == k){if(hSum > hMax){begin = left;hMax = hSum;sMin = sSum;}else if(hSum == hMax && sSum < sMin){                begin = left;sMin = sSum;}}right++;}cout << begin + 1<< endl;return 0;
    }
    
  • 优化版本2:前缀和

2.chika和蜜柑

1.题目链接


2.算法原理详解 && 详细讲解

  • 优化版本:排序/TOP-K --> 堆/数组模拟均可 --> 自定排序规则
    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;typedef pair<int, int> PII;int main()
    {int n = 0, k = 0;cin >> n >> k;vector<PII> orgs(n); // <sour, sweet>for(int i = 0; i < n; i++){cin >> orgs[i].first;}for(int i = 0; i < n; i++){cin >> orgs[i].second;}sort(orgs.begin(), orgs.end(), [&](const PII& p1, const PII& p2){if(p1.second != p2.second){return p1.second > p2.second;}else{return p1.first < p2.first;}});long long sour = 0, sweet = 0;for(int i = 0; i < k; i++){sour += orgs[i].first;sweet += orgs[i].second;}cout << sour << " " << sweet << endl;return 0;
    }
    

3.礼物的最大价值

1.题目链接


2.算法原理详解 && 代码实现

  • 自己的版本:暴搜 --> 超时
    class Solution 
    {
    public:int dx[2] = {1, 0}; int dy[2] = {0, 1};int n = 0, m = 0, cnt = 0, ret = 0;int maxValue(vector<vector<int> >& grid) {n = grid.size(), m = grid[0].size();DFS(grid, grid[0][0], 0, 0);return ret;}void DFS(vector<vector<int> >& grid, int cnt, int x, int y){if(x == n - 1 && y == m - 1){ret = max(cnt, ret);}for(int k = 0; k < 2; k++){int a = x + dx[k], b = y + dy[k];if(a < n && b < m){DFS(grid, cnt + grid[a][b], a, b);}}}
    };
    
  • 优化版本:动态规划 – 路径问题
    int maxValue(vector<vector<int> >& grid)
    {int n = grid.size(), m = grid[0].size();vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));for(int i = 1; i <=n; i++){for(int j = 1; j <= m; j++){dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];}}return dp[n][m];
    }
    

http://www.ppmy.cn/server/107395.html

相关文章

黑神话悟空丨资源合集,光追配置+修改器+各种奇奇怪怪的MOD

国产3A大作 黑神话悟空 推出了一些奇奇怪怪的mod(非官方)&#xff0c;作为一款备受瞩目的单机作品&#xff0c;黑神话悟空 不仅在剧情和画面上表现出色&#xff0c;同时也为玩家提供了丰富的Mod支持。 哈哈哈哈&#xff0c;总是就是奇奇怪怪&#xff0c;悟空被玩坏了&#xff…

【快速选择算法】解决TopK问题中前K小的数字问题

目录 1.前言2.题目简介3.求解思路4.示例代码 1.前言 在一个数组中找到这个数组前K小的数字有三种方式&#xff1a; 排序 O(N*logN)堆排序&#xff1a;建立一个k个大小的大堆(如果是找前K大的数字的话用小堆) O(N*logK)快速选择算法&#xff1a;原地交换数字&#xff0c;使得该…

Dubbo源码解析之@DubboService、@DubboReference(Dubbo源码一)

更好的阅读体验&#xff1a;Dubbo源码解析之DubboService、DubboReference&#xff08;Dubbo源码一&#xff09; 视频讲解&#xff1a;https://www.bilibili.com/video/BV1nBsMejEbL 对于Dubbo用的最多的就是DubboService、DubboReference&#xff0c;与之对应的就是服务的提供…

高效的时间序列可视化:减少认知负荷获得更清晰的洞察

可视化时间序列数据是具有挑战性,尤其是涉及多个数据集时。精心设计的可视化不仅能清晰地传达信息,还能减少观察者的认知负荷,使其更容易提取有意义的洞察。 在本文中,我们将探讨使真实世界的疫苗接种数据来可视化单个时间序列和多个时间序列。 数据可视化中认知负荷的重要性 …

从etcd学习raft

在etcd的项目下有一个使用raft的示例&#xff0c;在之前读etcd代码的时候会比较难理解raft相关的代码。因此通过这个示例会更容易的了解raft相关的实现细节。 我将这部分代码推送到了我的git仓库&#xff1a;https://github.com/yugu2day/raftexample 在示例中&#xff0c;主…

NVIDIA将在Hot Chips 2024会议上展示Blackwell服务器装置

NVIDIA 将在 Hot Chips 2024 上展示其 Blackwell 技术堆栈&#xff0c;并在本周末和下周的主要活动中进行会前演示。对于 NVIDIA 发烧友来说&#xff0c;这是一个激动人心的时刻&#xff0c;他们将深入了解NVIDIA的一些最新技术。然而&#xff0c;Blackwell GPU 的潜在延迟可能…

字母的大小写转换(tolower、toupper、transform)

字母的大小写转换&#xff08;tolower、toupper、transform&#xff09; 1. tolower&#xff08;&#xff09;、toupper&#xff08;&#xff09;函数 &#xff08;这个在之前的一篇文章 “字符串中需要掌握的函数总结&#xff08;1&#xff09;”中有较为详细的介绍。&#…

解决 JS WebSocket 心跳检测 重连

解决 JS WebSocket 心跳检测 重连 文章目录 解决 JS WebSocket 心跳检测 重连一、WebSocket 心跳检测的作用二、心跳检测的处理方案1. 创建 WebSocket 连接2. 心跳参数设置3. 心跳检测逻辑4. 心跳包响应处理5. 断线重连机制 三、总结 一、WebSocket 心跳检测的作用 WebSocket 是…