当前位置: 首页 > news >正文

力扣11.1

2518. 好分区的数目

给你一个正整数数组 nums 和一个整数 k

分区 的定义是:将数组划分成两个有序的 组 ,并满足每个元素 恰好 存在于 某一个 组中。如果分区中每个组的元素和都大于等于 k ,则认为分区是一个好分区。

返回 不同 的好分区的数目。由于答案可能很大,请返回对 109 + 7 取余 后的结果。

如果在两个分区中,存在某个元素 nums[i] 被分在不同的组中,则认为这两个分区不同。

数据范围

  • 1 <= nums.length, k <= 1000
  • 1 <= nums[i] <= 109

分析

逆向思维,由于元素和大于等于 k k k的个数不是很好算,因此我们计算元素和小于 k k k的个数,由于每个数都必须被选择,因此实际我们考虑第一个集合的方案个数即可,这样就可以转化为01背包问题,我们令 d p [ i ] [ j ] dp[i][j] dp[i][j]为前 i i i个数,总和为 j j j的个数,对于第 i i i个数,有两种决策

  • 选第 i i i个数: d p [ i ] [ j ] = d p [ i − 1 ] [ j ] + d p [ i − 1 ] [ j − n u m s [ i ] ] dp[i][j]=dp[i-1][j]+dp[i-1][j-nums[i]] dp[i][j]=dp[i1][j]+dp[i1][jnums[i]]
  • 不选第 i i i个数: d p [ i ] [ j ] = d p [ i − 1 ] [ j ] dp[i][j]=dp[i-1][j] dp[i][j]=dp[i1][j]

对于不选第 i i i个数,实际就是将他放到第二个集合
最后不合法的方案个数为 e r r = ∑ i = 0 k − 1 d p [ n ] [ i ] err=\sum_{i=0}^{k-1}dp[n][i] err=i=0k1dp[n][i](其中n为nums的个数),因为集合一和二若互换元素也算一种方案,最后不合法方案 e r r ∗ 2 err*2 err2
**注意:**若 ∑ i = 0 n − 1 n u m s [ i ] < 2 ∗ k \sum_{i=0}^{n-1}nums[i]<2*k i=0n1nums[i]<2k,此时需要进行特判,因为在计算不合法数组方案的时候最后 e r r ∗ 2 err*2 err2会重复计算
考虑这样的例子, k = 10 , n u m s [ ] = 1 , 2 , 3 , 4 k=10,nums[]={1,2,3,4} k=10,nums[]=1,2,3,4
此时若第一个集合方案有{1}{2}{3}{4}{1,2}{1,3}{1,4}{2,3}{2,4}{3,4}{1,2,3}{1,2,4}{1,3,4}{2,3,4}{1,2,3,4},对于集合1为{1}的情况,集合2为{2,3,4},但是{2,3,4}也在集合1的方案中,因此实际此时已经包含了集合1:{1}集合2:{2,3,4},和集合1:{2,3,4},集合2:{1}的情况,但是最后err仍然乘了2,所以多算了一倍

代码

typedef long long LL;
class Solution {
public:const static LL N = 1005, mod = 1e9 + 7;LL dp[N][N];LL qpow(LL a, LL n) {LL res = 1;while(n) {if(n & 1) res = res * a % mod;a = a % mod * a % mod;n >>= 1;}return res;}int countPartitions(vector<int>& nums, int k) {int n = nums.size();LL tres = 0;for(auto tk : nums) {tres += tk;}if(tres < 2 * k) return 0;dp[0][0] = 1;for(int i = 0; i < n; i ++ ) {for(int j = 0; j < k; j ++ ) {dp[i + 1][j] = dp[i][j];if(j >= nums[i]) dp[i + 1][j] += dp[i][j - nums[i]];dp[i + 1][j] %= mod;}}LL t = 0;for(int i = 0; i < k; i ++ ) {t += dp[n][i];t %= mod;}t *= 2;LL res = ((qpow(2, n) - t + mod) % mod + mod) % mod; return res;}
};

3259. 超级饮料的最大强化能量

来自未来的体育科学家给你两个整数数组 energyDrinkA 和 energyDrinkB,数组长度都等于 n。这两个数组分别代表 A、B 两种不同能量饮料每小时所能提供的强化能量。

你需要每小时饮用一种能量饮料来 最大化 你的总强化能量。然而,如果从一种能量饮料切换到另一种,你需要等待一小时来梳理身体的能量体系(在那个小时里你将不会获得任何强化能量)。

返回在接下来的 n 小时内你能获得的 最大 总强化能量。

注意 你可以选择从饮用任意一种能量饮料开始。

数据范围

  • n == energyDrinkA.length == energyDrinkB.length
  • 3 <= n <= 105
  • 1 <= energyDrinkA[i], energyDrinkB[i] <= 105

分析

类似于打家劫舍,令dp[i][0]表示第i个数选择A数组的最大能量和,dp[i][1]表示第i个数选择B数组的最大能量和,状态转移如下:

  • d p [ i ] [ 0 ] = m a x ( d p [ i − 2 ] [ 1 ] , d p [ i − 1 ] [ 0 ] ) + A [ i ] dp[i][0]=max(dp[i-2][1],dp[i-1][0])+A[i] dp[i][0]=max(dp[i2][1],dp[i1][0])+A[i]
  • d p [ i ] [ 1 ] = m a x ( d p [ i − 2 ] [ 0 ] , d p [ i − 1 ] [ 1 ] ) + B [ i ] dp[i][1]=max(dp[i-2][0],dp[i-1][1])+B[i] dp[i][1]=max(dp[i2][0],dp[i1][1])+B[i]

考虑先选A和先选B两种情况

代码

typedef long long LL;
class Solution {
public:const static int N = 1e5 + 5;LL dp[N][2];LL maxEnergyBoost(vector<int>& energyDrinkA, vector<int>& energyDrinkB) {int n = energyDrinkA.size();dp[1][0] = energyDrinkA[0];for(int i = 1; i < n; i ++ ) {dp[i + 1][1] = max(dp[i - 1][0], dp[i][1]) + energyDrinkB[i];dp[i + 1][0] = max(dp[i][0], dp[i - 1][1]) + energyDrinkA[i];}LL res = max(dp[n][0], dp[n][1]);cout << dp[n][0] << " " << dp[n][1] << endl;memset(dp, 0, sizeof(dp));dp[1][1] = energyDrinkB[0];for(int i = 1; i < n; i ++ ) {dp[i + 1][0] = max(dp[i - 1][1], dp[i][0]) + energyDrinkA[i];dp[i + 1][1] = max(dp[i][1], dp[i - 1][0]) + energyDrinkB[i];}res = max(res, dp[n][0]);res = max(res, dp[n][1]);return res;}
};

相关文章:

力扣11.1

2518. 好分区的数目 给你一个正整数数组 nums 和一个整数 k 。 分区 的定义是&#xff1a;将数组划分成两个有序的 组 &#xff0c;并满足每个元素 恰好 存在于 某一个 组中。如果分区中每个组的元素和都大于等于 k &#xff0c;则认为分区是一个好分区。 返回 不同 的好分区…...

打印室预约系统|基于java和小程序的打印室预约系统设计与实现(源码+数据库+文档)

打印室预约系统 目录 基于java和小程序的打印室预约系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#x…...

操作系统-多线程案例

一、单例模式&#xff08;是一种设计模式&#xff09; 设计模式有很多种&#xff0c;不同的语法中也有不同的设计模式 单例 单个实例&#xff08;对象) 某个类&#xff0c;在一个进程中&#xff0c;只应该创建出一个实例&#xff0c;&#xff08;原则上不该有多个&#xff…...

什么是FUSE用户态文件系统

零. 文件系统 1. 为什么要有文件系统 文件系统是操作系统中管理文件和目录的一种机制。它提供了组织、存储、检索和更新文件的方法&#xff0c;主要如下&#xff1a; 数据组织&#xff1a;文件系统将数据组织成文件和目录&#xff0c;使用户能够更方便地管理和查找文件。每个…...

[每日一练]销售分析(通过数据的0/1转换进行是否存在的查询)

#该题目来源于力扣&#xff1a; 1083. 销售分析 II - 力扣&#xff08;LeetCode&#xff09; 题目要求&#xff1a; 表&#xff1a;Product----------------------- | Column Name | Type | ----------------------- | product_id | int | | product_name | varch…...

.NET Core WebApi第7讲:项目的发布与部署

一、理解 前端跟后端拿数据&#xff0c;然后在前端页面中展示&#xff0c;就是我们要完成的事情。 把前端跟后端开发好之后&#xff0c;我们需要落地部署&#xff0c;这个时候就需要一个服务器。 服务器就是一台电脑&#xff0c;只要windows里面有一个叫IIS的管理器。 二、项目…...

【python 将数据写入csv文件】正确方式

data [{username: jack, password: 1234}, ……]# 保存为CSV文件 with open(IP_output.csv, w, newline, encodingutf-8) as file:fieldnames [username, password]writer csv.DictWriter(file, fieldnamesfieldnames, quotingcsv.QUOTE_NONE)writer.writeheader() # 写入列…...

OpenCV4.8 开发实战系列专栏之 10 - 像素值统计

大家好,欢迎大家学习OpenCV4.8 开发实战专栏,长期更新,不断分享源码。 专栏代码全部基于C++ 与Python双语演示,专栏答疑群 请联系微信 OpenCVXueTang_Asst 本文关键知识点:像素值统计 最小(min)最大(max)均值(mean)标准方差(standard deviation)API知识点 最大最小值min…...

pandas计算相关性并画热力图

实现这个功能有很多方法&#xff0c;但是下面的方法还是比较优雅的&#xff1a; cols ["ASSET", "HOUSES", "INCOME", "DEBT", "EDUC"] corr df[cols].corr() corr.style.background_gradient(axisNone)讲解&#xff1a; …...

初始Docker

概述&#xff1a; 容器&#xff0c;作为云原生技术的重要组成部分&#xff0c;与虚拟机一样&#xff0c;均属于虚拟化技术的范畴。然而&#xff0c;容器技术以其独特的优势&#xff0c;在虚拟化领域中脱颖而出。与虚拟机不同&#xff0c;容器能够摆脱操作系统的束缚&#xff0…...

Redis-概念、安装、基本配置

文章目录 一、Redis及Redis集群概念、分布式系统概念一-1 Redis是什么一-2 什么是分布式系统、分布式缓存一-3 什么是Redis集群、实现Redis集群的方法有哪些、这些跟Redis的sentinel和cluster有什么关系一-4 Redis的库一-5 Redis中的Key与Value是什么、如何进行操作使用它们添加…...

qt QPlainTextEdit详解

QPlainTextEdit是一个功能强大、易于使用的纯文本编辑器/查看器。它使用与QTextEdit相同的技术和概念&#xff0c;但是为纯文本的处理进行了优化&#xff0c;因此更适合处理大型纯文本文档。QPlainTextEdit不提供富文本编辑功能&#xff0c;如字体、颜色、大小等的格式化&#…...

【机器学习】23. 聚类-GMM: Gaussian Mixture Model

1. 定义和假设 定义&#xff1a;probabilistic clustering&#xff08;model-base&#xff09; 假设&#xff1a;数据服从正态分布 2. 算法内容 我们假设数据是由k个高斯&#xff08;正态&#xff09;分布混合生成的。每个分布有2个参数&#xff1a;μ和σ。 一个分布对应一…...

深度探索C++对象模型

文章目录 前言一、关于对象C对象模型 二、构造函数实例分析 拷贝构造函数程序转化语意学(Program Transformation Semantics)成员初始化列表 三、数据语义学(The Semantics of Data)数据存取多种继承情况讨论仅单一继承加上虚函数多重继承虚拟继承 Pointer to Data Members 四、…...

电脑怎么设置开机密码:保障个人信息安全的第一步

在数字化时代&#xff0c;个人信息的安全至关重要。电脑作为我们日常工作和生活中不可或缺的设备&#xff0c;存储了大量的私人数据和敏感信息。为了防止未经授权的访问&#xff0c;设置开机密码是保护个人隐私和信息安全的基本措施之一。本文将详细介绍如何在不同操作系统下为…...

MybatisPlus入门(六)MybatisPlus-null值处理

一、MybatisPlus-null值处理 1.1&#xff09;问题引入&#xff1a; 在查询中遇到如下情况&#xff0c;有部分筛选条件没有值&#xff0c;如商品价格有最大值和最小值&#xff0c;商品价格部分时候没有值。 1.2&#xff09;解决办法&#xff1a; 步骤一&#xff1a;新建查询实…...

红帽认证有必要考吗?这四大人群推荐考取!

红帽认证(Red Hat Certification)作为全球公认的Linux技能认证&#xff0c;对于某些特定人群来说&#xff0c;考取这一认证无疑是一个明智的选择。本文将探讨红帽认证的必要性&#xff0c;并为四类人群提供考取红帽认证的建议。 1. IT专业人士 对于IT专业人士来说&#xff0…...

基于SSM+微信小程序的社团登录管理系统(社团1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 2、项目技术 3、开发环境 4、功能介绍 1、项目介绍 基于SSM微信小程序的社团登录管理系统实现了管理员及社团、用户。 1、管理员实现了首页、用户管理、社团管理、社团信息管理、社…...

html中cookie如何存储

在HTML中&#xff0c;可以使用JavaScript来创建、读取和删除cookie。以下是创建和读取cookie的基本示例&#xff1a; 创建cookie: function setCookie(name, value, daysToLive) { var cookie name "" encodeURIComponent(value); if (typeof daysToLive …...

C++基础三(构造函数,形参默认值,函数重载,单例模式,析构函数,内联函数,拷贝构造函数)

C有六个默认函数&#xff0c;分别是&#xff1a; 1、默认构造函数; 2、默认拷贝构造函数; 3、默认析构函数; 4、赋值运算符; 5、取址运算符; 6、取址运算符const; 构造函数 构造函数(初始化类成员变量)&#xff1a; 1、属于类的成员函数之一 …...

Linux五种I/O模型详解与性能对比

1. Linux I/O 模型基础概念解析在深入探讨五种I/O模型之前&#xff0c;我们需要先理解几个关键的基础概念。这些概念是理解不同I/O模型差异的基石&#xff0c;也是很多开发者在实际工作中容易混淆的地方。1.1 用户态与内核态Linux系统将运行环境分为用户态(User mode)和内核态(…...

SEO_避开常见误区,正确理解SEO的核心价值(127 )

SEO的核心价值&#xff1a;避开常见误区&#xff0c;正确理解 在当今互联网时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;无疑是提升网站流量、吸引潜在客户的重要手段。许多企业在SEO实践中常常陷入一些误区&#xff0c;无法正确理解SEO的核心价值&#xff0c;导…...

LangChain-AI应用开发框架(四)

目录 一.LangChain软件包安装 二.LangChain能力详解 1.本章节环境说明 2.目标与内容 三.详细过程 1.步骤1&#xff1a; a.申请API key并配置环境变量 b.配置环境变量 步骤2:定义大模型 a.安装OpenAI包 b.定义大模型 步骤3&#xff1a;定义消息列表 步骤4&#xff…...

AI率15-20-30哪来的各平台要求全汇总

论文AI率多少算合格&#xff1f;15%&#xff1f;20%&#xff1f;30%&#xff1f; 这个问题没有统一答案&#xff0c;因为不同学校、不同平台的标准不一样。搞清楚这个&#xff0c;你才知道自己的目标线在哪里&#xff0c;才能判断用什么工具处理、处理到什么程度就够了。 检测…...

G-Helper:重塑华硕硬件控制体验的轻量级开源解决方案

G-Helper&#xff1a;重塑华硕硬件控制体验的轻量级开源解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Sca…...

终极指南:如何为Figma安装中文界面插件,让设计工作更高效

终极指南&#xff1a;如何为Figma安装中文界面插件&#xff0c;让设计工作更高效 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN FigmaCN是一款专为中文用户设计的Figma界面汉化插件&am…...

从WPF迁移到Avalonia:开发者必须掌握的12个关键差异与实战转换指南

1. 文件格式与样式系统的根本差异 如果你是从WPF转向Avalonia的老手&#xff0c;第一个迎面而来的变化就是文件扩展名。在WPF中我们熟悉的.xaml文件&#xff0c;在Avalonia中变成了.axaml。这个小小的"a"前缀背后&#xff0c;其实隐藏着框架设计理念的重大转变。我刚…...

intv_ai_mk11惊艳效果展示:输入‘设计一个碳中和主题PPT’→大纲+每页文案+视觉建议

intv_ai_mk11惊艳效果展示&#xff1a;输入设计一个碳中和主题PPT→大纲每页文案视觉建议 1. 效果预览&#xff1a;从简单指令到完整PPT方案 当我向intv_ai_mk11输入"设计一个碳中和主题PPT"这个简单指令时&#xff0c;它在30秒内就生成了一个专业级的完整方案。这…...

多功能 PEG 衍生物 Ergosterol-PEG-MAL,Ergosterol-PEG-Maleimide详解

试剂基本信息中文名称&#xff1a;麦角固醇-聚乙二醇-马来酰亚胺英文名称&#xff1a;Ergosterol-PEG-MAL&#xff0c;Ergosterol-PEG-Maleimide分子量&#xff1a;0.4k&#xff0c;0.6k&#xff0c;1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#xff0c;10k&#xff0c…...

用Manim做中文数学微课?先搞定MathTex颜色分染和ctex包配置(保姆级教程)

Manim中文数学微课实战&#xff1a;从零实现公式染色与中文混排 当你在B站刷到那些将复杂数学公式演绎成动画的艺术品时&#xff0c;是否好奇过它们是如何制作的&#xff1f;作为教育视频创作者&#xff0c;我最初被Manim的数学可视化能力吸引&#xff0c;却在尝试制作中文微课…...