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

[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.lryc.cn/news/281124.html

相关文章:

  • Qt点击按钮在其附近弹出一个窗口
  • Springboot注解@Configuration和@Bean注解作用,生命周期
  • 30天精通Nodejs--第十五天:Websocket
  • C++深入学习之STL:2、适配器、迭代器与算法部分
  • Tiktok/抖音旋转验证码识别
  • 【Java 设计模式】设计原则
  • Druid连接池工具公式化SQL附踩坑记录
  • Linux内核--网络协议栈(二)UDP数据包发送
  • 基于深度学习的时间序列算法总结
  • nginx中多个server块共用upstream会相互影响吗
  • 基于信号完整性的一些PCB设计建议
  • 《BackTrader量化交易图解》第8章:plot 绘制金融图
  • 什么是欧拉筛??
  • 2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑩
  • 使用WAF防御网络上的隐蔽威胁之SSRF攻击
  • Redis基础系列-哨兵模式
  • 【angular教程240112】09(完) Angular中的数据请求 与 路由
  • go中拷贝文件操作
  • 未来气膜体育馆的发展趋势是什么?
  • 通信扫盲(五)
  • nbcio-boot项目的文件上传与回显处理方法
  • 《动手学深度学习》学习笔记 第9章 现代循环神经网络
  • 「HDLBits题解」Vector100r
  • 如何制作专业商业画册,提升品牌形象
  • vim升级和配置
  • java通过okhttp方式实现https请求的工具类(绕过证书验证)
  • mysql定时备份shell脚本和还原
  • DevOps搭建(十六)-Jenkins+K8s部署详细步骤
  • WaitForSingleObject 函数的诸多用途与使用场景总结
  • 4、Redis高并发分布式锁实战