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

LeeCode 1787 DP

题意

传送门 LeeCode 1787 使所有区间的异或结果为零

题解

任一个元素都至多对 k k k个长度为 k k k的区间产生影响,故难以直接依次处理每一个元素。

观察到满足条件的数组中模 k k k意义下索引相等的各个元素相同,故可以依次处理每一个同余类。 d p [ i ] [ j ] dp[i][j] dp[i][j]表示前 i i i个同余类异或结果为 j j j情况下的最小更改元素数。直接枚举每一种取值,时间复杂度 O ( n 2 20 ) O(n2^{20}) O(n220),难以胜任。设同余类 i i i元素规模为 m m m,则至多改动 m m m个元素,则可以从任一个状态转移过来,那么贪心地选择改动数量最少的状态即可。对于出现在同余类中的取值,直接暴力枚举即可。总时间复杂度 O ( n 2 10 ) O(n2^{10}) O(n210)

#include <bits/stdc++.h>
using namespace std;class Solution {public:int minChanges(vector<int>& nums, int k) {vector<map<int, int>> cnt(k);vector<int> num(k);int n = nums.size();for (int i = 0; i < n; ++i) {num[i % k] += 1;cnt[i % k][nums[i]] += 1;}auto _min = [](int& x, int y) {x = min(x, y);};const int lg = 10;const int inf = 1e9;vector<vector<int>> dp(k + 1, vector<int>(1 << lg, inf));dp[0][0] = 0;for (int i = 0; i < k; ++i) {int m = num[i];int p = min_element(dp[i].begin(), dp[i].end()) - dp[i].begin();for (int j = 0; j < 1 << lg; ++j) {for (auto& [x, c] : cnt[i]) {_min(dp[i + 1][j], dp[i][j ^ x] + m - c);}_min(dp[i + 1][j], dp[i][p] + m);}}return dp[k][0];}
};
http://www.lryc.cn/news/362653.html

相关文章:

  • 如何有效屏蔽手机上的骚扰电话20240530
  • Linux CGroup资源限制(概念限制进程CPU使用)
  • Latex中标注通讯作者
  • PyQt5开发笔记:1.环境搭建与界面美化
  • 公派/自费访问学者申请出国访学的常见问题解答(下)
  • 完全指南:C语言学习资源汇总
  • Kubernetes——Ingress详解
  • 反射、类加载、静态代理,jdk动态代理,cglib代理
  • MySQL Hints:控制查询优化器的选择
  • 【TB作品】msp430g2553单片机,OLED,PCF8591,ADC,DAC
  • C#WPF数字大屏项目实战10--不良指标分页
  • 数字塔问题
  • 【介绍下Pwn,什么是Pwn?】
  • Python:b站多个视频爬取下载
  • Java常规题技术分享
  • Pytorch语义分割(1)-----加载数据
  • Java中加号的多种用途
  • React useCallback用法
  • Flutter 中的 ErrorWidget 小部件:全面指南
  • 【数据结构】穿梭在二叉树的时间隧道:顺序存储的实现
  • 【数据结构与算法 经典例题】链表的回文结构(图文详解)
  • 通过DirectML和ONNXRuntime运行Phi-3模型
  • C语言经典例题-18
  • 计算机网络之crc循环冗余校验、子网划分、rip协议路由转发表、时延计算、香浓定理 奈氏准则、TCP超时重传 RTO
  • 揭秘高效人事财务对接新方案!
  • Unity中的MVC框架
  • 网工内推 | 上市公司网工,Base广东,思科DE/IE认证优先
  • ZYNQ AXI4 FDMA内存读写
  • 签名安全规范:解决【请求对象json序列化时,时间字段被强制转换成时间戳的问题】
  • Web3.0区块链技术开发方案丨ICO与IDO代币开发