[ACM学习] 动态规划基础之一二三维dp

课内学习的动态规划

有记忆的迭代

优化解的结构:原始问题的一部分解是子问题的解

三要素:1.子问题 2.状态的定义 3.状态转移方程 

定义

线性dp的一道例题

dp[i]表示以位置 i 结尾的方案总数,dp[4]=2,因为:首先只放一个4是可以的,4的位置之前还可以放1,我们不需要知道1之前还可以放什么数,只需要知道1的方案数加上4也是 dp[4] 的一部分方案数。

记得用前缀和来维护所有可行的方案。

二维dp

经验:列常常是1到结果、行常常是是否把这个选项 i 放入考虑范围

例题

首先:为什么用二维dp:对于选择,不能用一条线来解决,需要用一个从1到n的数组,来存储:把第一个选项纳入考虑(只是考虑,不是真放了),到把前 i 个纳入考虑(方便我们在上一个的基础上解决下一个) 

注意这里的列坐标是从 1 到 64 ,不是1到x,因为可以由一个比x更大的数异或 ai 后,结果是x,所以我们有必要保存比x大的数,(64的由来:每个进行异或的数大小不超过63,即11111111,所以进行异或和的结果也肯定不会超过11111111,即63)

附上代码

#include <iostream>
using namespace std;const int N = 1e5+5;
const int p = 998244353;
int dp[N][70];
int a[N];int main()
{// 请在此输入您的代码int n,x;cin >> n >> x;for(int i = 1 ; i <= n ; i++){cin >> a[i];}dp[0][0]=1;for(int i = 1 ; i <= n ; i++){for(int j = 0 ; j <= 64 ; j++){dp[i][j] = (dp[i-1][j]+dp[i-1][j^a[i]])%p;}}cout << dp[n][x];return 0;
}

注意:什么样的数字异或 ai 后是 j ?   ---  j ^ ai 这个数字(这就要用到异或 j ^ ai ^ ai = j)

三维dp例题

多一个条件就多了一个维度,来记录k次位移。

附上代码

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

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

相关文章

【驱动】TI AM437x(内核调试-06):网卡(PHY和MAC)、七层OSI

1、网络基础知识 1.1 七层OSI 第一层:物理层。 1)需求: 两个电脑之间如何进行通信? 具体就是一台发比特流,另一台能够收到。于是就有了物理层:主要是定义设备标准,如网线的额接口类型、管线的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流,就是从1/0…

【GitHub项目推荐--一行命令下载全网视频】【转载】

项目地址&#xff1a;https://github.com/soimort/you-get 首先声明&#xff0c;请不要使用该项目从事违法活动哦~仅供学习使用&#xff01; 解决痛点 如果你上网的时候看了一些东西不错&#xff0c;想下载下来&#xff0c;或者在线观看喜欢的视频&#xff0c;但是没有找到网…

xilinxi mulitboot 启动

xilinix在线更新有两种方式&#xff0c;一种是使用ICAP原语&#xff0c;另一中是在xdc中约束&#xff0c;根据应用的场景不同&#xff0c;选用不同的启动方式&#xff0c;第二种更为简单。 可参考官方提供的手册和实例 XAPP1247 链接&#xff1a; XAPP1247 golden和updata.b…

python期末考试:基本数据的表示

1. 关于 Python 的数字类型&#xff0c;以下选项中描述错误的是( )。 A. Python 整数类型提供了 4 种进制表示&#xff1a;十进制、二进制、八进制和十六进制 B. Python 语言要求所有浮点数必须带有小数部分 C. Python 语言中&#xff0c;复数类型中实数部分和虚数部分的数…

【零基础入门Python数据分析】Anaconda3 JupyterNotebookseaborn版

目录 一、安装环境 python介绍 anaconda介绍 jupyter notebook介绍 anaconda3 环境安装 解决JuPyter500&#xff1a;Internal Server Error问题-CSDN博客 Jupyter notebook快捷键操作大全 二、Python基础入门 数据类型与变量 数据类型 变量及赋值 布尔类型与逻辑运算…

vue刷新当前页面

我们经常遇到此种情形&#xff0c;当新增编辑完成后&#xff0c;需要重新刷新页面数据&#xff0c;重新调用接口较多时&#xff0c;挨个调用过于繁琐&#xff1b;甚至可能遇到跨组件调用的问题&#xff0c;毫无疑问&#xff0c;处理起来有些许费力&#xff0c;本文就将如何处理…

基于时域有限差分法的FDTD的计算电磁学算法-YEE网格下的更新公式推导

基于时域有限差分法的FDTD的计算电磁学算法&#xff08;含Matlab代码&#xff09;-YEE网格下的更新公式推导 参考书籍&#xff1a;The finite-difference time-domain method for electromagnetics with MATLAB simulations&#xff08;国内翻译版本&#xff1a;MATLAB模拟的电…

【MATLAB】 SSA奇异谱分析信号分解算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 SSA奇异谱分析&#xff08;Singular Spectrum Analysis&#xff09;是一种处理非线性时间序列数据的方法&#xff0c;可以对时间序列进行分析和预测。 它基于构造在时间序列上的特定矩阵的奇异值分解&#…

C#,入门教程(66)——枚举Enum的高等用法

前言&#xff1a;国内码农与国外优秀程序员的最大区别是&#xff0c;我们的专家、教授喜欢唾沫横飞地&#xff0c;夸夸其谈语言特性、框架、性能&#xff0c;唯一目的是带私货&#xff08;书籍或教程&#xff09;&#xff0c;很少能写出真有用的程序。差距在哪呢&#xff1f;基…

线性代数——行列式相关性质

目录 一、行列式与它的转置列行列式相等 二、对换行列式的两行&#xff08;列&#xff09;&#xff0c;行列式变号 三、行列式某行&#xff08;列&#xff09;有公因子k&#xff0c;则k可以提到行列式外 四、行列式中若两行成比例&#xff0c;则行列式为0 五、行列式的某一行…

Python | 三、函数

函数的形参和实参&#xff08;对应卡码网11题句子缩写&#xff09; 除非实参是可变对象&#xff0c;如列表、字典和集合&#xff0c;则此时形参会复制实参的地址&#xff0c;即此时二者指向同一个地址&#xff0c;因此在函数内对形参的操作会影响到实参除这种情况外&#xff0…

嵌入式应用开发学习建议

学习嵌入式应用开发需要掌握一定的编程语言、操作系统和硬件知识&#xff0c;以下是一些学习嵌入式应用开发的建议: 1&#xff09;学习C/C等编程语言&#xff1a;C/C是嵌入式系统最常用的编程语言之一&#xff0c;掌握这些语言的语法和特性可以帮助开发人员更好地理解嵌入式系…

What is `HttpServletRequestWrapper` does?

HttpServletRequestWrapper 是 Java Servlet API 中的一个类&#xff0c;作为 HttpServletRequest 接口的包装器&#xff08;Decorator&#xff09;实现。 该类设计为装饰者模式&#xff08;Decorator Pattern&#xff09;的一部分&#xff0c;允许开发人员通过包装现有的 Http…

【DP】53.最大子数组和

题目 法1&#xff1a;DP class Solution {public int maxSubArray(int[] nums) {if (nums null || nums.length 0) {return 0;}int n nums.length, res nums[0];int[] dp new int[n];dp[0] nums[0];for (int i 1; i < nums.length; i) {dp[i] Math.max(nums[i], d…

Orchestrator源码解读4-计划内切换

计划内切换 Graceful master promotion 通常因为升级&#xff0c;服务器为何等原因&#xff0c;需要按照计划将主库迁移到其他实例的情况。 计划内切换的拓扑结构改变的流程如下&#xff1a; orchestrator自己选或用户自己指定一个从库实例为新主库orchestrator将其他从库ch…

【江科大STM32合集】day2按键控制LED光敏传感器控制峰鸣器

【STM32合集】day2按键控制LED&光敏传感器控制峰鸣器 电路基础c语言基础main.ckey.c结果 实现一个键开关灯实验结果避坑 电路基础 运算放大器-在江科大51单片机b站视频&#xff08;AD/DA&#xff09;复习 原理&#xff1a;两个极端 同相输入端电压 》反相输入端 电压输出最…

【leetcode题解C++】707.设计链表

你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表&#xff0c;则还需要属性 prev 以指示链表中的上一个节点…

Git_01_push失败之解决办法

从本地服务器向云端服务器提交代码的过程中&#xff0c;碰到了以下问题&#xff1a; 提示账号没有push权限 rootlocalhost:~/repo/$ git push qnx HEAD:refs/for/develop Counting objects: 29, done. Delta compression using up to 32 threads. Compressing objects: 100% …

如何利用小程序介绍公司品牌形象?

企业小程序的建设对于现代企业来说已经成为了一项必不可少的工作。随着移动互联网的快速发展&#xff0c;越来越多的职场人士和创业老板希望通过小程序来提升企业形象&#xff0c;增强与用户的互动&#xff0c;实现更好的商业效果。在这个过程中&#xff0c;使用第三方制作平台…

排序算法-冒泡排序(含C语言代码示例)

一、算法介绍 冒泡排序是一种简单的排序算法&#xff0c;其核心思想是重复地遍历待排序列表&#xff0c;比较并交换相邻元素&#xff0c;使得较大的元素逐渐“冒泡”到列表的末尾&#xff0c;而较小的元素则逐渐上浮至列表的前端。该算法的名字源于类比元素的移动过程&#xff…