【力扣周赛】第 115 场双周赛(⭐优化背包DP)(TODO)

文章目录

  • 竞赛链接
  • Q1:2899. 上一个遍历的整数💩(阅读理解题,按题意模拟)
  • Q2:2900. 最长相邻不相等子序列 I(贪心)
  • Q3:2901. 最长相邻不相等子序列 II(类似 最长上升子序列,记录具体序列元素)
    • 代码1——自己写的
    • 代码2——记录from数组
  • Q4:2902. 和带限制的子多重集合的数目(多重背包方案数:从朴素 DP 到优化)
    • 解法1——朴素的多重背包(超时)
    • 解法2——多重背包/分组背包 DP优化(TODO)⭐
  • 成绩记录

竞赛链接

https://leetcode.cn/contest/biweekly-contest-115/

Q1:2899. 上一个遍历的整数💩(阅读理解题,按题意模拟)

https://leetcode.cn/problems/last-visited-integers/description/
在这里插入图片描述

提示:

1 <= words.length <= 100
words[i] == "prev" 或 1 <= int(words[i]) <= 100

题目有一丢丢难理解,要慢慢看。

用一个nums列表存储已经枚举过的数字,枚举到prev的时候取出放入ans就好了。

class Solution {public List<Integer> lastVisitedIntegers(List<String> words) {List<Integer> ans = new ArrayList<>(), ls = new ArrayList<>();int k = 0;for (String word: words) {if ("prev".equals(word)) {k++;if (k > ls.size()) ans.add(-1);else ans.add(ls.get(ls.size() - k));// 倒数第k个} else {k = 0;// k清零ls.add(Integer.parseInt(word));}}return ans;}
}

Q2:2900. 最长相邻不相等子序列 I(贪心)

https://leetcode.cn/problems/longest-unequal-adjacent-groups-subsequence-i/description/

在这里插入图片描述

1 <= n == words.length == groups.length <= 100
1 <= words[i].length <= 10
0 <= groups[i] < 2
words 中的字符串 互不相同 。
words[i] 只包含小写英文字母。

题目要求两个相邻位置的 group 不能相等,没有别的要求,那么只要 group 发生了变化就加入答案即可。

class Solution {public List<String> getWordsInLongestSubsequence(int n, String[] words, int[] groups) {List<String> ans = new ArrayList<>();int last = -1;      // 记录上一个group值for (int i = 0; i < n; ++i) {if (groups[i] != last) {last = groups[i];ans.add(words[i]);}}return ans;}
}

Q3:2901. 最长相邻不相等子序列 II(类似 最长上升子序列,记录具体序列元素)

https://leetcode.cn/problems/longest-unequal-adjacent-groups-subsequence-ii/description/

在这里插入图片描述

提示:

1 <= n == words.length == groups.length <= 1000
1 <= words[i].length <= 10
1 <= groups[i] <= n
words 中的字符串 互不相同 。
words[i] 只包含小写英文字母。

代码1——自己写的

class Solution {public List<String> getWordsInLongestSubsequence(int n, String[] words, int[] groups) {int[] dp = new int[n];Arrays.fill(dp, 1);int mlId = 0, ml = 0;List<String>[] ans = new ArrayList[n];for (int i = 0; i < n; ++i) {ans[i] = new ArrayList<>();ans[i].add(words[i]);for (int j = 0; j < i; ++j) {if (groups[i] != groups[j] && check(words[i], words[j])) {if (dp[j] + 1 > dp[i]) {dp[i] = dp[j] + 1;ans[i] = new ArrayList<>(ans[j]);;ans[i].add(words[i]);}}}if (dp[i] > ml) {ml = dp[i];mlId = i;}}return ans[mlId];}public boolean check(String a, String b) {if (a.length() != b.length()) return false;boolean f = false;for (int i = 0; i < a.length(); i++) {if (a.charAt(i) != b.charAt(i)) {if (f) return false;f = true;}}return f;}
}

代码2——记录from数组

https://leetcode.cn/problems/longest-unequal-adjacent-groups-subsequence-ii/solutions/2482844/zi-xu-lie-dp-de-si-kao-tao-lu-pythonjava-kmaf/

class Solution {public List<String> getWordsInLongestSubsequence(int n, String[] words, int[] groups) {int[] dp = new int[n], from = new int[n];Arrays.fill(dp, 1);int id = 0;for (int i = 0; i < n; ++i) {from[i] = i;for (int j = 0; j < i; ++j) {if (groups[i] != groups[j] && check(words[i], words[j])) {if (dp[j] + 1 > dp[i]) {dp[i] = dp[j] + 1;from[i] = j;}}}if (dp[i] > dp[id]) id = i;}List<String> ans = new ArrayList<>();int m = dp[id];for (int i = 0; i < m; ++i) {ans.add(words[id]);id = from[id];}Collections.reverse(ans);return ans;}public boolean check(String a, String b) {if (a.length() != b.length()) return false;boolean f = false;for (int i = 0; i < a.length(); i++) {if (a.charAt(i) != b.charAt(i)) {if (f) return false;f = true;}}return f;}
}

还可以倒序求 dp,这样最后列表就不用翻转了。

Q4:2902. 和带限制的子多重集合的数目(多重背包方案数:从朴素 DP 到优化)

https://leetcode.cn/problems/count-of-sub-multisets-with-bounded-sum/description/
在这里插入图片描述

提示:
1 <= nums.length <= 2 * 10^4
0 <= nums[i] <= 2 * 10^4
nums 的和不超过 2 * 10^4 。
0 <= l <= r <= 2 * 10^4

解法1——朴素的多重背包(超时)

相当于求 dp[l],…,dp[r] 之和,dp[i] 表示组成 i 的方案数。
将相同数字分到同一组,完成

class Solution {public int countSubMultisets(List<Integer> nums, int l, int r) {Map<Integer, Integer> cnt = new HashMap<>();for (int x: nums) cnt.merge(x, 1, Integer::sum);final long MOD = (int)1e9 + 7;long[] dp = new long[r + 1];dp[0] = 1;for (int x: cnt.keySet()) {         // 枚举组if (x == 0) continue;for (int j = r; j >= 0; --j) {  // 枚举容量for (int i = 1; i <= cnt.get(x); ++i) { // 枚举组内物品if (j >= x * i) dp[j] = (dp[j] + dp[j - x * i]) % MOD;}}}long ans = 0;for (int i = l; i <= r; ++i) {ans = (ans + dp[i]) % MOD;}return (int)((ans * (cnt.getOrDefault(0, 0) + 1)) % MOD);}
}

解法2——多重背包/分组背包 DP优化(TODO)⭐

成绩记录

本次没有参加竞赛。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法通关村第一关—白银挑战—链表高频面试算法题—查找两个链表的第一个公共子节点

文章目录 查找两个链表的第一个公共子节点&#xff08;1&#xff09;暴力求解法&#xff08;2&#xff09;使用哈希Hash⭐&#xff08;3&#xff09;使用集合⭐ - 与Hash类似&#xff08;4&#xff09;使用栈⭐&#xff08;5&#xff09;仍有更多方法&#xff0c;作者尚未理解&…

【小布_ORACLE笔记】Part11-1--RMAN Backups

Oracle的数据备份于恢复RMAN Backups 学习第11章需要掌握&#xff1a; 一.RMAN的备份类型 二.使用backup命令创建备份集 三.创建备份文件 四.备份归档日志文件 五.使用RMAN的copy命令创建镜像拷贝 文章目录 Oracle的数据备份于恢复RMAN Backups1.RMAN Backup Concepts&#x…

LeetCode | 965. 单值二叉树

LeetCode | 965. 单值二叉树 OJ链接 首先判断树为不为空&#xff0c;为空直接true然后判断左子树的val&#xff0c;和根的val相不相同再判断右子树的val&#xff0c;和根的val相不相同最后递归左子树和右子树 bool isUnivalTree(struct TreeNode* root) {if(root NULL)retur…

Python解释器的安装【侯小啾python领航班系列(一)】

Python解释器的安装【侯小啾python领航班系列(一)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…

深入Spring Security魔幻山谷-获取认证机制核心原理讲解(新版)

文/朱季谦 这是一个古老的传说。 在神秘的Web系统世界里&#xff0c;有一座名为Spring Security的山谷&#xff0c;它高耸入云&#xff0c;蔓延千里&#xff0c;鸟飞不过&#xff0c;兽攀不了。这座山谷只有一条逼仄的道路可通。然而&#xff0c;若要通过这条道路前往另一头的…

Vue + Element ui 实现动态表单,包括新增行/删除行/动态表单验证/提交功能

原创/朱季谦 最近通过Vue Element ui实现了动态表单功能&#xff0c;该功能还包括了动态表单新增行、删除行、动态表单验证、动态表单提交功能&#xff0c;趁热打铁&#xff0c;将开发心得记录下来&#xff0c;方便以后再遇到类似功能时&#xff0c;直接拿来应用。 简化的页…

zabbix6.4.0配置邮件及企微机器人群聊告警

一、邮件告警 根据公司邮箱自行配置&#xff0c;电子邮件、用户账号密码填自己的邮箱账号密码 动作本次使用的默认的&#xff0c;如果为了更加美观可自行修改。 二、企业微信机器人告警 首先在企微上创建群聊&#xff0c;之后添加群聊机器人 将地址复制&#xff0c;后面用 …

MATLAB 模型参考自适应控制 - Model Reference Adaptive Control

系列文章目录 文章目录 系列文章目录前言一、参考模型二、扰动与不确定性模型三、直接 MRAC名义模型参数更新间接 MRAC估计器模型和控制器增益参数更新学习修正参考文献 前言 模型参考自适应控制模块计算控制动作&#xff0c;使不确定的受控系统跟踪给定参考被控对象模型的行为…

【LeetCode刷题笔记】102. 二叉树的层序遍历

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

kkFileView 从源码编译最新安装包

目录 一、前言二、拉取 kkFileView 最新代码三、kkFileView 打包 一、前言 kkFileView 是一个开源的附件在线预览项目&#xff0c;可以让你的项目方便的在线预览附件&#xff0c;包括比如&#xff1a;doc、docx、pdf、xml、xls、xlsx、ppt、pptx、zip、png、jpg、txt、mp4等常…

测评补单助力亚马逊,速卖通,国际站卖家抢占市场,提升转化和评分

想要快速提升商品的销量&#xff0c;测评补单这种方法见效是最快的。特别是新品上线&#xff0c;缺少用户评价&#xff0c;转化率不好&#xff0c;很多商家新品上线都会做测评补单&#xff0c;搞些商品好评&#xff0c;不但可以提升转化&#xff0c;同时在平台也可以获得更多展…

基于若依的ruoyi-nbcio流程管理系统仿钉钉流程初步完成转bpmn设计(还有bug,以后再修改)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 今天初步完成仿钉钉流程转bpmn设计的工作&#xff0c;当然还有不少bug&#xff0c;以后有需要或者网友也帮…

:deep(){} 样式穿透不生效问题解决方案

在我们写vue的项目的时候&#xff0c;可能会遇到这种情况&#xff0c;父子组件&#xff0c;在父组件中使用了样式穿透给子组件的类添加样式&#xff0c;结果失败了。比如下面这种情况。 父组件 <template><p>我是父组件</p><Son /> </template>…

web前端之css变量的妙用、通过JavaScrip改变css文件中的属性值、querySelector、setProperty

MENU 效果图htmlJavaScripstylequerySelectorsetProperty 效果图 html <div id"idBox" class"p_r w_680 h_160 b_1s_red"><div id"idItem" class"p_a l_0 t_30 w_100 h_100 bc_rgba_255_00_05 radius_50_"></div> …

uniapp实现文件预览过程

H5实现预览 <template><iframe :src"_url" style"width:100vw; height: 100vh;" frameborder"0"></iframe> </template> <script lang"ts"> export default {data() {return {_url: ,}},onLoad(option…

2023年第十二届数学建模国际赛小美赛A题太阳黑子预测求解分析

2023年第十二届数学建模国际赛小美赛 A题 太阳黑子预测 原题再现&#xff1a; 太阳黑子是太阳光球上的一种现象&#xff0c;表现为比周围区域暗的暂时斑点。它们是由抑制对流的磁通量浓度引起的表面温度降低区域。太阳黑子出现在活跃区域内&#xff0c;通常成对出现&#xff…

Vmware安装Centos7

CentOs7镜像文件下载 centos7 镜像文件下载-CSDN博客 配置虚拟机 打开Vmware&#xff0c;点击新建虚拟机 典型安装与自定义安装 典型安装&#xff1a;VMware会将主流的配置应用在虚拟机的操作系统上&#xff0c;对于新手来很友好。 自定义安装&#xff1a;自定义安装可以针…

LangChain(0.0.340)官方文档三:Prompts上——自定义提示模板、使用实时特征或少量示例创建提示模板

文章目录 一、 Prompt templates1.1 langchain_core.prompts1.2 PromptTemplate1.2.1 简介1.2.2 ICEL1.2.3 Validate template 1.3 ChatPromptTemplate1.3.1 使用role创建1.3.2 使用MessagePromptTemplate创建1.3.3 自定义MessagePromptTemplate1.3.3.1 自定义消息角色名1.3.3.…

密码学学习笔记(二十二):RSA签名方案

在RSA中&#xff0c;计算公钥的欧拉函数和私钥是关键步骤。 如何计算呢&#xff1f; RSA算法中的是两个质数 p 和 q 的乘积。所以两个质数必须要找到。一旦找到 p 和 q就可以使用公式() (p-1) (q-1)来计算。 计算私钥d 私钥 d 是满足 e*d ≡ 1 mod   的整数。换句话说&a…

寻找链表的中间节点

问题描述&#xff1a; 给定一个头结点为head的非空单链表&#xff0c;返回链表的中间结点。如果有两个中间节点&#xff0c;则返回第二个中间结点&#xff0c;个数为奇数返回一个值&#xff0c;个数为偶数返回两个中间结点的第二个值。 思路&#xff1a; 用快慢指针来寻找中间…