程序员面试金典 - 面试题 08.14. 布尔运算(区间动态规划)

1. 题目

给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成。
实现一个函数,算出有几种可使该表达式得出 result 值的括号方法。

示例 1:
输入: s = "1^0|0|1", result = 0
输出: 2
解释: 两种可能的括号方法是
1^(0|(0|1))
1^((0|0)|1)示例 2:
输入: s = "0&0&0&1^1|0", result = 1
输出: 10提示:
运算符的数量不超过 19

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/boolean-evaluation-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 区间DP解题

  • dp?[i][j] 表示 区间[i,j]内运算值为 ?(0 or 1) 的方案数
  • 初始化,每个数字处dp?[i][i]=1, if s[i]==?
  • 然后按长度len递增,求解dp[i][i+len]
  • dp[i][i+len]的求解可以根据其内部左右两侧的方案乘积得出
  • 所以分成两部分dp[i,j],dp[j+2][i+len],遍历所有的jj+1处为运算符
  • 然后根据运算符的三种可能,讨论0,1的结果,累加即可
class Solution {
public:int countEval(string s, int result) {if(s=="")return 0;int i, j, n = s.size(), len;vector<vector<int>> dp0(n,vector<int>(n,0));vector<vector<int>> dp1(n,vector<int>(n,0));//dp?[i][j] 表示 区间[i,j]内运算值为 ? 的方案数for(i = 0; i < n; i+=2){if(s[i]=='1')dp1[i][i] = 1;elsedp0[i][i] = 1;}for(len = 2; len <= n-1; len += 2){	//按长度递增for(i = 0; i < n-len; i += 2){	//左端点ifor(j = i; j <= i+len-2; j+=2){	//中间端点jif(s[j+1]=='&'){dp1[i][i+len] += dp1[i][j]*dp1[j+2][i+len];dp0[i][i+len] += dp0[i][j]*dp0[j+2][i+len]+dp1[i][j]*dp0[j+2][i+len]+dp0[i][j]*dp1[j+2][i+len];}else if(s[j+1]=='|'){dp1[i][i+len] += dp1[i][j]*dp1[j+2][i+len]+dp1[i][j]*dp0[j+2][i+len]+dp0[i][j]*dp1[j+2][i+len];dp0[i][i+len] += dp0[i][j]*dp0[j+2][i+len];}else//^{dp1[i][i+len] += dp1[i][j]*dp0[j+2][i+len]+dp0[i][j]*dp1[j+2][i+len];dp0[i][i+len] += dp0[i][j]*dp0[j+2][i+len]+dp1[i][j]*dp1[j+2][i+len];}}}}if(result)return dp1[0][n-1];return dp0[0][n-1];}
};

8 ms 7 MB

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

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

相关文章

推荐优质的深度学习公众号

人工智能行业目前已接近饱和状态&#xff0c;如何从内卷中脱颖而出&#xff0c;除了极强的自律之外&#xff0c;系统性的学习方法也很重要。今天给大家推荐10个原创公众号&#xff0c;这些公众号定期会发些高质量原创&#xff0c;希望可以让你更高效的学习。小白学视觉哈工大博…

SQLServer安装挂起解决方法

出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机”错误。无法进行下去。 具体步骤是&#xff1a; 1&#xff09;添加/删除程序中彻底删除sql server。 2&#xff09;将没有删除的sql server目录也删除掉。 …

程序员面试金典 - 面试题 17.06. 2出现的次数(找递推规律)

1. 题目 编写一个方法&#xff0c;计算从 0 到 n (含 n) 中数字 2 出现的次数。 示例: 输入: 25 输出: 9 解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次)提示&#xff1a; n < 10^9来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;…

python8个程序语言_所有程序员必知--2019年最流行的8种编程语言和框架

上图是您应该在2019年根据各种&#xff0c;统计和事实寻找的8种最佳编程语言和框架的列表。在技​​术不断进步的当代世界中&#xff0c;计算机无处不在。为计算机编写程序是当前IT市场上最关键的工作配置文件之一。 您是否想过还有比这更忙的任务&#xff1f;它正在选择合适的…

ChatGPT进入百度“弱智吧”后,疯了

文 | 兔子酱无论你玩不玩贴吧&#xff0c;“弱智吧”的大名很多人应该听说过。如今弱智吧的关注人数已经超过了200万。。。不得不说&#xff0c;能将这么多“弱智”聚在一起&#xff0c;“弱智吧”撑起了后百度贴吧时代的辉煌。。。来一起感受下“弱智吧”的日常&#xff1a;能…

打印网页时背景图片的问题

当我们打印一个网页时&#xff0c;默认情况下&#xff0c;网页的背景图片是不会被打印出来的 这与我们的打印代码无关&#xff0c;需要设置IE便可&#xff0c;如下图&#xff1a; 转载于:https://www.cnblogs.com/blodfox777/archive/2008/08/05/1260860.html

程序员面试金典 - 面试题 08.02. 迷路的机器人(DFS/动态规划)

文章目录1. 题目2. 解题2.1 DFS2.2 动态规划1. 题目 设想有个机器人坐在一个网格的左上角&#xff0c;网格 r 行 c 列。 机器人只能向下或向右移动&#xff0c;但不能走到一些被禁止的网格&#xff08;有障碍物&#xff09;。 设计一种算法&#xff0c;寻找机器人从左上角移动…

python数据分析开发环境_在MAC上搭建python数据分析开发环境

最近工作转型到数据开发领域&#xff0c;想在本地搭建一个数据开发环境。自己有三年python开发经验&#xff0c;马上想到使用numpy、scipy、sklearn、pandas搭建一套数据开发环境。 ubuntu的环境&#xff0c;百度中文章比较多&#xff0c;搭建起来非常顺利。MAC环境的资料比较少…

方向盘开极品飞车9很Hapyy

一直以来&#xff0c;总是找不到一款自己心爱的游戏&#xff0c;呵呵&#xff0c;弄到个方向盘&#xff0c;开极品很HI喔。。。 虽然现在没空去玩&#xff0c;只能把方向盘放在电脑的左边&#xff0c;没事的时候只能看看了&#xff0c;不过有个期盼可以玩一把的游戏也很不错呀&…

负样本为王,百篇论文概览负采样方法的前世今生

文&#xff5c;徐澜玲源&#xff5c;RUC AI Box目录1. 研究背景1.1 什么是负采样&#xff1f;1.2 为什么需要负采样&#xff1f;1.3 为什么需要高质量的负采样&#xff1f;2. 负采样方法分类梳理2.1 静态负采样2.2 强负例采样2.3 对抗式负采样2.4 基于图的负采样2.5 引入额外信…

程序员面试金典 - 面试题 17.25. 单词矩阵(Trie树+DFS回溯,hard)

1. 题目 给定一份单词的清单&#xff0c;设计一个算法&#xff0c;创建由字母组成的面积最大的矩形&#xff0c;其中每一行组成一个单词(自左向右)&#xff0c;每一列也组成一个单词(自上而下)。 不要求这些单词在清单里连续出现&#xff0c;但要求所有行等长&#xff0c;所有…

python mysql操作封装库_python封装mysq操作,进行数据库的增删改

python操作mysql进行封装&#xff0c;封装的好处我就不提了&#xff0c;以下是我做项目时的一个封装&#xff0c;大家可以根据实际需要进行自己的一个封装我封装的内容&#xff1a;1.数据库的配置文件2.获取数据配置文件的地址3.连接数据库的操作4.操作mysql的语句5.调用mysql的…

SQL2000数据库中删除“坏表”的方法

SQL2000数据库中删除“坏表”的方法在一些网站或者软件系统中&#xff0c;由于安全或者程序异常等问题&#xff0c;可能会在SQL Server 2000中造成一个异常问题&#xff1a;在企业管理器中打开数据库发现有一些“坏表”&#xff0c;即无法使用&#xff0c;也无法正常删除。其原…

偶然当程序员却拿下图灵奖,超算榜单之父讲述人生开挂经历

文&#xff5c;衡宇 发自 凹非寺源&#xff5c;量子位40年前偶然走上程序员道路的Jack Dongarra&#xff0c;是今年的图灵奖得主。奖项设立机构美国计算机协会&#xff08;ACM&#xff09;表示&#xff0c;Dongarra的算法与软件成果推动了高性能计算&#xff08;HPC&#xff09…

程序员面试金典 - 面试题 16.18. 模式匹配(逻辑题)

1. 题目 你有两个字符串&#xff0c;即pattern和value。 pattern字符串由字母"a"和"b"组成&#xff0c;用于描述字符串中的模式。 例如&#xff0c;字符串"catcatgocatgo"匹配模式"aabab"&#xff08;其中"cat"是"a&q…

拼团小程序源码_拼团软件微信拼团小程序拼团卖水果、让您快速引流

微信作为国内最大的社交平台&#xff0c;已经拥有11亿的用户&#xff0c;成为社交电商最主要的流量平台。从电商商家到线下门店&#xff0c;从品牌商到个体户&#xff0c;大家都想瓜分微信平台的流量。同时&#xff0c;微信也在不断完善小程序在各业务场景中的接口&#xff0c;…

vs2008 USB转COM口发送字符中途出错的问题.

在VS2008中,使用USB转串口发送字符,当拔下设备再插上,串口在使用的途中会抛出错误,用Try..Catch都无法捕获. 在 System.UnauthorizedAccessException 中第一次偶然出现的“System.dll”类型的异常 “Gosun.SMC.SMS.WindowService.exe”(托管): 已加载“C:"Windows"as…

python安装requests库超时_【Python 库】requests 详解超时和重试

网络请求不可避免会遇上请求超时的情况&#xff0c;在 requests 中&#xff0c;如果不设置你的程序可能会永远失去响应。超时又可分为连接超时和读取超时。连接超时连接超时指的是在你的客户端实现到远端机器端口的连接时(对应的是connect())&#xff0c;Request 等待的秒数。i…

IT信息业、金融业从业人员悲歌

在台湾&#xff0c;不论是金融从业人员、IT 软件业、硬件业、电子代工业&#xff0c;工程师、技术人员的工作压力都颇大。要终其一生不断学习、为公司卖命。不同的是&#xff0c;在台湾的电子、光电、晶圆大厂&#xff0c;若你身为电子、电机、硬件、Firmware、Driver 撰码工程…

程序员面试金典 - 面试题 17.26. 稀疏相似度(哈希map)

1. 题目 两个(具有不同单词的)文档的交集(intersection)中元素的个数除以并集(union)中元素的个数&#xff0c;就是这两个文档的相似度。 例如&#xff0c;{1, 5, 3} 和 {1, 7, 2, 3} 的相似度是 0.4&#xff0c;其中&#xff0c;交集的元素有 2 个&#xff0c;并集的元素有 …