首页 > 其他分享 >二维动态规划

二维动态规划

时间:2024-11-02 17:02:06浏览次数:3  
标签:状态 方程 sum 食材 二维 差值 加维 动态 规划

在二维动态规划中,往往会有两个维度上的限制,此时,可以通过加维、换状态、改变枚举顺序来实现消除这两个维度的限制,但有时,往往需要分析

[P5664] Emiya 家今天的饭

分析题目,易知烹饪方法可以通过顺序枚举取消后效性,而主要食材加维、换序都不行,考虑别的道路

反向考虑,容斥原理

当正向思路受到阻塞时,可以尝试逆向思考

观察限制:每种主要食材至多在一半的菜中

反向考虑时,发现不合法方案中,在一半以上的菜中的主要食材只会有一种(不可能有两个一半以上),此时我们需要维护的只有该主要食材的状态,加维即可

设\(f[i][j][k][l]\)为第i种主要食材非法,取到第j种方法,该食材取了k个,其他取了l个的方案数(自己推方程)

剪枝优化

推出上面的方程发现是\(O(mn^3)\)的

观察方程:

(转移方程自己推)

\[ans=\sum^m_{i=1}\sum^n_{k=0}\sum^{k-1}_{l=0}f[i][n][k][l] \]

首先,对于\(f[i][j][][]\),\(k,l\)取值不会影响转移方程

其次,最后取得答案皆为\(k>l\)

因此,我们可以把k和l的差值相同的状态压到一起,通过取\(k-l>0\)的状态统计答案

如何证明正确性?

1、由于转移方程相同,可以保证状态的正确转移,只要初始化时塞一起,就是正确的;

2、差值可以描述全部状态;

3、取出答案时,因为\(k-l>0\)保证了它就是非法情况,统计正确;

注意k,l不能为总菜数、该食材菜数,此时用差值维护的话不一定全都非法(如差值3可以是4-1),可能会有式子使得它能够统计,但是像差值这么简单的大概没有罢(

总结

*&($#^&^*@#$&@

思维强度太高了

\(Update:2023.3.28\)

写出来力,但是处理差分负权时把边界\([1,2n]\)写成\([1,2m]\)了……

总之,容斥和压缩都是常见方法,标蓝很合理

[P2051] [AHOI2009] 中国象棋

题意:每行每列不超过2个棋,求方案数

行内元素\(a[i][j]\)过于一般,没有什么吸引人的特殊性质(因为没有值,大家都长得一样,甚至支持列之间交换),而且每行只能有2个,联想状压,所以考虑整行作状态

此时第一维限制处理掉了,第二维考虑加维

看到列支持交换,一个思路是将列有序化再组合,另一个思路是将列的整体性质记录

记录有几列取了0个/1个/2个即可,状态完全,支持转移

标签:状态,方程,sum,食材,二维,差值,加维,动态,规划
From: https://www.cnblogs.com/zhone-lb/p/18522178

相关文章

  • 决策单调优化动态规划
    四边形不等式决策单调即对于dp方程\(f[i]=min/max(f[j]+w(j+1,i))\),设\(f[i]\)从\(pre[i]\)转移,有$\forall\i>j,pre[i]\lepre[j]$写出\(pre[]\)就是大概这种效果:111111224444444446666可以观察到决策单增,那么对于有序表,可以想到利用二分或分治等\(O(logn)\)的算法来优化......
  • 期望动态规划
    概率与期望定义期望:对于一个离散随机变量\(X\),自变量的取值范围为\(\{x_1,x_2,x_3,...\,,x_n\}\),\(P(x_i)\)为\(X=x_i\)的概率。其期望被定义为:\[E(X)=\sum^n_{i=1}x_iP(x_i)\]简单理解就是加权平均。公式贝叶斯公式:全概率公式:应用1、有\(k\)只小鸟,每只都只能活一天,但......
  • 状态压缩动态规划
    \(3^n\)枚举子集状压DP中相当重要的技巧(虽然后位有FWT,FMT替代,但不是都能代)for(inti=x;i;i=(i-1)&x){//i就是x的子集}题目P6622[省选联考2020A/B卷]信号传递看数据范围,\(m\le23\),且不同分数段增长很慢,表明会有\(O(2^m)\)的做法,考虑状压或搜索剪枝......
  • 共享IPAM地址池实现多账号下地址统一规划管理
    多账号体系架构中,企业网络管理员使用IPAM功能规划和管理工作中的IP地址;规划完成后,可通过资源共享功能,将创建的IPAM地址池共享给业务账号,实现企业内部网络地址的统一分配与管理,简化网络管理流程,助力企业专注于核心业务创新。功能简介资源共享多账号架构体系中,如果存在某一特......
  • 动态规划-回文串系列——1312.让字符串变成回文串的最小插入次数
    1.题目解析题目来源:1312.让字符串变成回文串的最小插入次数——力扣测试用例2.算法原理1.状态表示一维dp表无法存储任意区间内将字符串变为回文子串的最小插入次数,所以使用二维dp表存储将[i,j]区间的字符串变为回文子串的最小插入次数dp[i][j]:将[i,j]区间的字......
  • 动态规划题解报告
    [APIO2016]划艇注意到\(n\le500\)考虑\(O(n^3)\)的做法。值域小的做法比较显然,值域比较大,考虑离散化(将\(b_i+1\)然后限制变为\([a_i,b_i+1)\))。设\(f_{i,j}\)表示考虑前\(i\)个,\(i\)选择\(j\)的方案数。发现由于离散化了很难转移\(f_{k,j}\(k<i)\)的情况......
  • c语言:一维数组+二维数组+二分查找法
     1:数组的概念     概念:数组是一组相同元素的集合。     特点:1、数组中存放的是一个或者多个数据,但是数组的元素个数不可以为0.3          2、数组里存放的数据是同类型的数据     分类:数组分为一维数组和多维数组,其中多......
  • 编辑距离 | 动态规划
    设A和B是两个字符串,求将字符串A转换为字符串B的最少操作次数。字符操作共有如下三种:     (1)删除一个字符。     (2)插入一个字符。     (3)将一个字符改为另一个字符。 如A=“kitten”、B=“sitting“,求编辑距离。#include<iostream>#include<cstdio......
  • 动态规划 —— 路径问题-地下城游戏
    1. 地下城游戏题目链接:174.地下城游戏-力扣(LeetCode)https://leetcode.cn/problems/dungeon-game/description/ 2. 算法原理 状态表示:以莫一个位置位置为结尾或者以莫一个位置为起点  dp[i,j]表示:到达[i,j]位置的时候,骑士所需要的最低初始健康点数(X),这个状......