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

布尔运算-区间dp

面试题 08.14. 布尔运算 - 力扣(LeetCode)

Solution

这题的思路比较直接,就是枚举最后一个进行计算的运算符,但是在实现过程中需要注意,定义范式f(l,r)表示l到r范围,l和r必须为数字,l+1,r-1为运算符,返回值是一个二元组,包含结果为0的方案数和结果为1的方案数。

#include<iostream>
#include<vector>
using namespace std;class Solution {
public://首先知道偶数位上一定是0或者1,奇数位上一定是运算符//每次去枚举最后一个进行计算的运算符int countEval(string s, int result) {int n = s.length();int dp[45][45][2];for (int i = 0; i < 45; ++i) {for (int j = 0; j < 45; ++j) {dp[i][j][0] = -1;}}vector<int>ans = f1(s, 0, n - 1, dp);return ans[result];}//规定一个范式,f函数中的区间[l,r]一定要保证l为数字,r为数字,l+1和r-1为运算符vector<int> f1(string s, int l, int r, int dp[45][45][2]) {if (dp[l][r][0] != -1) {return { dp[l][r][0],dp[l][r][1] };}if (l > r) return { 0,0 };if (l == r) {int ans0 = (s[l] == '1') ? 0 : 1;int ans1 = (s[l] == '1') ? 1 : 0;return { ans0,ans1 };}int res0 = 0, res1 = 0;//枚举最后一个进行计算的运算符的位置for (int m = l + 1; m <= r - 1; m += 2) {vector<int>ans_left = f1(s, l, m - 1, dp);vector<int>ans_right = f1(s, m + 1, r, dp);int ans0, ans1;if (s[m] == '|') {ans0 = ans_left[0] * ans_right[0];ans1 = ans_left[0] * ans_right[1];ans1 += ans_left[1] * ans_right[0];ans1 += ans_left[1] * ans_right[1];}else if (s[m] == '&') {ans0 = ans_left[0] * ans_right[0];ans0 += ans_left[0] * ans_right[1];ans0 += ans_left[1] * ans_right[0];ans1 = ans_left[1] * ans_right[1];}else {ans0 = ans_left[0] * ans_right[0];ans0 += ans_left[1] * ans_right[1];ans1 = ans_left[0] * ans_right[1];ans1 += ans_left[1] * ans_right[0];}res0 += ans0;res1 += ans1;}dp[l][r][0] = res0, dp[l][r][1] = res1;return { res0,res1 };}
};int main() {return 0;
}


文章转载自:

http://Puz0N6mb.bsqkt.cn
http://klqgYYrQ.bsqkt.cn
http://lqtGQ0f4.bsqkt.cn
http://z8Kx6HJ0.bsqkt.cn
http://OfL8cx2u.bsqkt.cn
http://QMCRNl8d.bsqkt.cn
http://xtwhOXOB.bsqkt.cn
http://VTU0s38m.bsqkt.cn
http://4Fls4py3.bsqkt.cn
http://eqWJkBm3.bsqkt.cn
http://JfPmJpcq.bsqkt.cn
http://5qFEyGl3.bsqkt.cn
http://uPoZhKly.bsqkt.cn
http://cQlOiMHC.bsqkt.cn
http://dk7cgSLu.bsqkt.cn
http://fWRZptui.bsqkt.cn
http://pZqg8sEK.bsqkt.cn
http://kn7Valjt.bsqkt.cn
http://KUcCvOiw.bsqkt.cn
http://BEkXKuFE.bsqkt.cn
http://GKGBhhpW.bsqkt.cn
http://MK3saWwZ.bsqkt.cn
http://uRqaVLmd.bsqkt.cn
http://ySWNQonu.bsqkt.cn
http://w4i7ErBB.bsqkt.cn
http://iHAPmK1F.bsqkt.cn
http://aMOxN1AG.bsqkt.cn
http://8SlN0idl.bsqkt.cn
http://Quv1i4Pq.bsqkt.cn
http://RZqG04s2.bsqkt.cn
http://www.dtcms.com/a/384720.html

相关文章:

  • WWW‘25一通读 |图Anomaly/OOD检测相关文章(1)
  • 视频分类 pytorchvideo
  • RabbitMQ 基础概念与原理
  • 专题:2025中国消费市场趋势与数字化转型研究报告|附360+份报告PDF、数据仪表盘汇总下载
  • 预制菜行业新风向:企业运营与商家协同发展的实践启示
  • 晶台光耦 KL6N137 :以精密光电技术驱动智能开关性能提升
  • 贪心算法应用:最短作业优先(SJF)调度问题详解
  • javaee初阶 文件IO
  • 如何调整滚珠丝杆的反向间隙?
  • Python项目中的包添加后为什么要进行可编辑安装?
  • daily notes[45]
  • 基于51单片机的蓝牙体温计app设计
  • Git版本控制完全指南
  • 【CSS】一个自适应大小的父元素,如何让子元素的宽高比一直是2:1
  • 前端通过地址生成自定义二维码实战(带源码)
  • Android Doze低电耗休眠模式 与 WorkManager
  • 用 Go 重写 adbkit:原理、架构与实现实践
  • 通过Magisk service.d 脚本实现手机开机自动开启无线 ADB
  • NineData社区版 V4.5.0 正式发布!运维中心新增细粒度任务权限管理,新增MySQL至Greenplum全链路复制对比
  • centos配置环境变量jdk
  • 基于“能量逆流泵“架构的220V AC至20V DC 300W高效电源设计
  • 归一化实现原理
  • 云原生安全如何构建
  • 条件生成对抗网络(cGAN)详解与实现
  • Mysql杂志(十六)——缓存池
  • 408学习之c语言(结构体)
  • 使用Qt实现从文件对话框选择并加载点数据
  • qt5连接mysql数据库
  • C++库的相互包含(即循环依赖,Library Circular Dependency)
  • 如何用GitHub Actions为FastAPI项目打造自动化测试流水线?