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

【状压DP】3276. 选择矩阵中单元格的最大得分|2403

本文涉及知识点

C++动态规划

3276. 选择矩阵中单元格的最大得分

给你一个由正整数构成的二维矩阵 grid。
你需要从矩阵中选择 一个或多个 单元格,选中的单元格应满足以下条件:
所选单元格中的任意两个单元格都不会处于矩阵的 同一行。
所选单元格的值 互不相同。
你的得分为所选单元格值的总和。
返回你能获得的 最大 得分。
示例 1:
输入: grid = [[1,2,3],[4,3,2],[1,1,1]]
输出: 8
解释:
选择上图中用彩色标记的单元格,对应的值分别为 1、3 和 4 。
示例 2:
输入: grid = [[8,7,6],[8,3,2]]
输出: 15
解释:
选择上图中用彩色标记的单元格,对应的值分别为 7 和 8 。
提示:
1 <= grid.length, grid[i].length <= 10
1 <= grid[i][j] <= 100

状态压缩动态规划

各行升序排序。R是网格的行数,M是max(grid[r][c])max(grid[r][c])max(grid[r][c])

动态规划的状态表示

我们选中的降序选择。
dp[m][min] ,(1<<r)&m 表示第r行是否选择。iMin表示选择的最小值。iMin∈[0,101]iMin \in [0,101]iMin[0,101]
空间复杂度O(2NM)O(2^NM)O(2NM)

动态规划的填表顺序

m从0到大,iMin任意升序。枚举前驱状态。

动态规划的转移方程

每种状态: 枚举从第r行选择:
it = lower(grid[r],iMin)
如果it 是首元素:
MaxSelf(dp[m ^(1<<r)][min],dp[m][min])
不是首元素:
–it。
MaxSelf(dp[m ^(1<<r)][min] ,dp[m][min]+*it)
时间复杂度O(N2NMlogC)O(N2^NMlogC)O(N2NMlogC)

动态规划的初始值

全为0

动态规划的返回值

dp.back().back()

http://www.lryc.cn/news/624041.html

相关文章:

  • 电动车安全技术全解析:从传统制动到智能驾驶的技术革命
  • MySQL深度理解-MySQL8新特性
  • 三种变量类型在局部与全局作用域的区别
  • 深入理解C#特性:从应用到自定义
  • 一起Oracle 19c bug 导致的业务系统超时问题分析
  • 嵌入式C语言学习笔记之枚举、联合体
  • Jenkins - CICD 注入环境变量避免明文密码暴露
  • 图解直接插入排序C语言实现
  • 跨越南北的养老对话:为培养“银发中国”人才注入新动能
  • 数据准备|生成折线图
  • Python自学09-常用数据结构之元组
  • Java语法进阶之常用类
  • 【新手入门】Android基础知识(二):Binder进程间通信,理解Binder工作原理以及Binder实体、Binder引用、Binder代理概念
  • K8S集群环境搭建(一)
  • 双指针和codetop2(最短路问题BFS)
  • Maven依赖范围
  • 检查xrdp远程连接桌面卡顿的问题(附解决sh脚本)
  • STM32入门之USART串口部分
  • # C++ 中的 `string_view` 和 `span`:现代安全视图指南
  • 多墨智能-AI一键生成工作文档/流程图/思维导图
  • Transformer 面试题及详细答案120道(61-70)-- 解码与生成
  • Spring IOC 学习笔记
  • Spring 创建 Bean 的 8 种主要方式
  • Vue3 中的 ref、模板引用和 defineExpose 详解
  • 数据结构初阶(18)快速排序·深入优化探讨
  • 【深度学习-基础知识】单机多卡和多机多卡训练
  • oom 文件怎么导到visualvm分析家
  • 生成模型实战 | InfoGAN详解与实现
  • 停车位 车辆
  • AI出题人给出的Java后端面经(十七)(日更)