小清新DP题(多做多想)

牛客小白月赛90 F

  • problem
    在这里插入图片描述
  • solution
    在这里插入图片描述
 	R(n), R(m); int L = 0;F(i, 1, m) R(d[i].st), R(d[i].en), c[++ L] = d[i].st, c[++ L] = d[i].en;c[++ L] = n;sort(c + 1, c + L + 1); int cnt = 0;F(i, 1, L) if (c[i] != c[i - 1]) {g[c[i]] = ++ cnt;D[cnt] = c[i];}sort(d + 1, d + m + 1);f[0][0][0] = 1;F(i, 0, m - 1)F(j, 0, cnt)F(k, 0, cnt) if (f[i][j][k]) {add(f[i + 1][j][k], f[i][j][k]);int l = D[j], r = D[k];int l_ = g[d[i + 1].st], r_ = g[d[i + 1].en];if (d[i + 1].st - 1 <= l) {add(f[i + 1][max(j, min(k, r_))][max(k, r_)], f[i][j][k]);}}W(f[m][cnt][cnt]);




CF833B The Bakery

  • 线段树优化DP
    在这里插入图片描述





  • 6353. 【NOIP2019模拟】给(ca)

  • Problem

在这里插入图片描述

这题题目需要注意就是每个节点都应该有2个儿子(他说没有叶子结点是错的,应该是要么没有儿子,要么有两个儿子),然后要求是到达每个叶子结点需要经过的向左的边不能超过M条.

  • Solution

    容易想到简单的计数Dp,f[i][j]表示当前有i个叶节点,最多的向左走了M次,O(n^3)

    非常妙的优化是考虑从dfs序角度DP,因为每一棵树都唯一对应着一个DFS序

    在这里插入图片描述
    在这里插入图片描述

S 老师的合并

  • problem
    在这里插入图片描述
  • solution

在这里插入图片描述

在合并括号序列时,先关注当前最后一个括号所配对到的位置,考虑求这一部分的方案数,再考虑剩下的部分方案(可以再递归去求方案)。

只能说不看这代码根本不知道这题解想要表达什么,具体想法参见代码,真的非常妙

void DFS(int u, int dep, vector<int> *G, vector<int> *tt, int *ttt) {tt[dep].push_back(u);ttt[u] = tt[dep].size() - 1;for (int v: G[u])DFS(v, dep + 1, G, tt, ttt);return;
}int ct = 0;int Solve(int nw1, int nw2, int lp1, int rp1, int lp2, int rp2) {if (lp1 == -1 || lp2 == -1)return 1;if (lp1 > rp1 || lp2 > rp2)return 1;int l1 = bin1[nw1][lp1], r1 = bin1[nw1][rp1]; // bin1[nw1][x] 表示第一棵树第nw1层的第x个节点int l2 = bin2[nw2][lp2], r2 = bin2[nw2][rp2]; // bin2[nw2][x] 表示第二棵树第nw2层的第x个节点if (vis[l1][r1][l2][r2])return dp[l1][r1][l2][r2];LL res = 0;++ ct;Add(res, Solve(nw1, nw2, lp1, rp1 - 1, lp2, rp2)); // 当前序列后面没有括号要合并了,第一课树的第rp1对应节点作为最外层括号。Add(res, Solve(nw1, nw2, lp1, rp1, lp2, rp2 - 1));
// 下面表示要合并括号的。int ll = 0, rr = 0;if (G2[r2].size())ll = id2[G2[r2][0]], rr = id2[G2[r2].back()];else ll = rr = -1;for (int i = 1; i <= rp1 - lp1 + 1; i++)Add(res, 1ll * Solve(nw1, nw2, lp1, rp1 - i, lp2, rp2 - 1) * Solve(nw1, nw2 + 1,rp1 - i + 1, rp1, ll, rr) % mod); // 表示当前最后一个括号是第二棵树的, rp1-i就表示用第一棵树当前深度的后面i个作为后缀,if (G1[r1].size())ll = id1[G1[r1][0]], rr = id1[G1[r1].back()];else ll = rr = -1;for (int i = 1; i <= rp2 - lp2 + 1; i++)Add(res, 1ll * Solve(nw1, nw2, lp1, rp1 - 1, lp2, rp2 - i) * Solve(nw1 + 1, nw2,ll, rr, rp2 - i + 1, rp2) % mod);vis[l1][r1][l2][r2] = 1;dp[l1][r1][l2][r2] = res;return res;
}int main() {n1 = read();for (int i = 2; i <= n1; i++)G1[read()].push_back(i);n2 = read();for (int i = 2; i <= n2; i++)G2[read()].push_back(i);DFS(1, 0, G1, bin1, id1);DFS(1, 0, G2, bin2, id2);LL ans = 0;if (G1[1].size()) {Add(ans, Solve(1, 0, id1[G1[1][0]], id1[G1[1].back()], 0, 0)); // 最外层括号是第一棵树的根节点} else Add(ans, 1); // 否则第二棵树的括号序只能不变的放到最外括号的里边if (G2[1].size()) {Add(ans, Solve(0, 1, 0, 0, id2[G2[1][0]], id2[G2[1].back()])); // 同理,最外层括号是第二棵树的根节点} else Add(ans, 1);cout << ans;


J. Journey on the Number Line

Problem

在这里插入图片描述

Solution

在这里插入图片描述

这里的实现参考:

for(int i=1;i<=n;i++) {for(int j=1;j<=i;j++)if(id[i]==1||id[i]==n) {trans(dp[i][j],dp[i-1][j-1],-x[id[i]]-y[id[i]],1);if(j)trans(dp[i][j],dp[i-1][j],x[id[i]]+y[id[i]],1);// 这里有点运用插空法的思想,头和尾的位置是固定的,所以方案乘1,其余是有几个空格就有乘多少方案,这样算起来容易太多了}else {if (j - tot > 0)trans(dp[i][j],dp[i-1][j-1],-2*x[id[i]]-2*y[id[i]],j-tot); // 这里就是j-1个联通块,有j个空,减去tot个(头尾影响),这里相当于作为一个独立的联通块加进去if (2 * j - tot > 0)trans(dp[i][j],dp[i-1][j],0,2*j-tot); // 这里是和之前的联通块合并,之前每个联通块都有头和尾,这个可以放到头或尾,同理要减去tot(不能放到st的头/en的尾)trans(dp[i][j],dp[i-1][j+1],2*x[id[i]]+2*y[id[i]],j); // 这里是合并两个联通块,j+1个联通块,当然只能有j个地方可以连,这是因为这些联通块的顺序已经相对确定了。}tot+=(id[i]==1||id[i]==n);
}

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

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

相关文章

ElasticSearch 安装(docker)

下载安装包 阿里云链接&#xff1a; elasticSearch.exe https://www.alipan.com/s/3A356NnmWaJ 提取码: 93da 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视频原画倍速播放。 安装步骤 1、首先…

冯唐成事心法笔记 —— 知人

系列文章目录 冯唐成事心法笔记 —— 知己 冯唐成事心法笔记 —— 知人 冯唐成事心法笔记 —— 知世 冯唐成事心法笔记 —— 知智慧 文章目录 系列文章目录PART 2 知人 人人都该懂战略人人都该懂战略第一&#xff0c;什么是战略第二&#xff0c;为什么要做战略第三&#xff0…

GPB | RegVar:基于深度神经网络的非编码区突变功能预测新方法

Genomics, Proteomics & Bioinformatics &#xff08;GPB&#xff09;发表了由军事医学研究院辐射医学研究所张成岗研究员、周钢桥研究员和卢一鸣副研究员团队完成的题为“RegVar: Tissue-specific Prioritization of Noncoding Regulatory Variants”的方法文章。我们的“…

Docker torchserve 部署模型流程——以WSL部署YOLO-FaceV2为例

Docker torchserve 部署模型流程——以WSL部署YOLO-FaceV2为例 Docker torchserve 模型部署 一、配置WSL安装docker二、配置docker环境1&#xff0c;拉取官方镜像2&#xff0c;启动docker容器&#xff0c;将本地路径映射到docker3&#xff0c;查看docker镜像4&#xff0c;进入…

Redis入门到实战教程(基础篇)笔记

教学来源&#xff1a; Redis课程介绍导学_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1cr4y1671t?p1一、Redis 入门 1.认识NoSQL 2.Redis在虚拟机中的安装和开机自启 Redis在虚拟机中安装和配置开机自启-CSDN博客https://blog.csdn.net/qq_69183322/article/deta…

项目管理中常用的三个工具:甘特图、看板、燃尽图

在日常项目管理的实践中&#xff0c;为了更有效地追踪项目进度、优化资源配置和提高团队协作效率&#xff0c;管理者常常会借助一些工具来辅助工作。这些工具的本质在于将抽象复杂的项目管理任务具象化、简单化&#xff0c;以更直观、方便的方式呈现出来。 以下介绍项目管理中…

2024.4.28 机器学习周报

目录 引言 Abstract 文献阅读 1、题目 2、引言 3、创新点 4、总体流程 5、网络结构 5.1、损失函数 5.2、Confidence Maps 5.3、Part Affinity Fields(PAFs) 5.4、多人的PAFs 6、实验 7、结论 深度学习 yolov8实现目标检测和人体姿态估计 Yolov8网络结构 yaml…

el-input-number 只能输入整数,最小值1,最大值5

<el-form-item label"排序" prop"name" > <el-input-number v-model"form.sort" placeholder"请输入唯一排序" :min1 :max"5" :precision"0" class"custom-input-number" /> </el-form-…

uniapp中vue写微信小程序的生命周期差别

根据uniapp官网里的生命周期&#xff0c;感觉不太对劲&#xff0c;就自己测试了几个&#xff0c;发现有所差别。 红字数字 为 实际测试生命周期顺序。 因为需要页面传参 后再 初始化数据&#xff0c;而onLoad(option)接收参数后&#xff0c;就已经过了create()了&#xff0c;所…

02_c/c++开源库ZeroMQ

1.安装 C库 libzmq sudo apt install libzmq3-dev 实例: https://zeromq.org/get-started/?languagec&librarylibzmq# 编译依赖: pkg-config --cflags --libs libzmq or cat /usr/lib/x86_64-linux-gnu/pkgconfig/libzmq.pc -isystem /usr/include/mit-krb5 -I/usr/in…

DSNeRF复现流程

创建虚拟环境安装依赖 conda create -n DSNeRF python3.7pip install -r requirements.txt下载LLFF数据放在创建的data文件下 https://drive.google.com/file/d/1RjhfcbsywOvw0ts1AFSri91mKANvEVOa/view?uspsharing 下载预先训练好的模型 bash download_models.sh渲染视频…

【Linux】进程间通信(共享内存、消息队列、信号量)

一、System V —— 共享内存&#xff08;详解&#xff09; 共享内存区是最快的 IPC 形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到内核&#xff0c;换句话说&#xff0c;就是进程不再通过执行进入内核的系统调用来传递彼此的数…

C# WinForm —— 10 单选按钮与复选框的介绍与使用

单选按钮 RadioButton 一组单选按钮中&#xff0c;只能选择一个&#xff0c;互相排斥 常用属性、事件&#xff1a; 属性用途(Name)单选按钮的ID&#xff0c;在代码里引用的时候会用到,一般以 rb开头Text单选按钮旁边显示的 文本信息Checked单选按钮的勾选状态Appearance控制单…

【JavaScript】内置对象 ④ ( Math 内置对象常用方法 | 取绝对值 | 向下取整 | 向上取整 | 四舍五入取整 | 取随机数 )

文章目录 一、Math 内置对象常用方法1、计算绝对值 - Math.abs2、取整计算 - Math.floor 向下取整 / Math.ceil 向上取整 / Math.round 四舍五入3、随机数 - Math.random4、代码示例 - 猜随机数 一、Math 内置对象常用方法 1、计算绝对值 - Math.abs 向 Math.abs() 方法中 传入…

报错:测试报错postman(测试接口)

报错如下 c.e.exception.GlobalExceptionHandler : 异常信息&#xff1a; Content type multipart/form-data;boundary--------------------------952399813172082093419475;charsetUTF-8 not supported 解决&#xff1a; 异常信息 Content type multipart/form-data;boundary…

力扣-1832.判断句子是否全为字母句

思路: 首先&#xff0c;我们初始化了一个长度为 26 的布尔值列表 exist&#xff0c;所有值都为 False&#xff0c;表示所有字母初始都未出现过。然后&#xff0c;我们遍历输入的字符串 sentence 中的每个字符。对于每个字符&#xff0c;我们通过计算其 ASCII 码值减去字母 a 的…

深度学习从入门到精通—Transformer

1.绪论介绍 1.1 传统的RNN网络 传统的RNN&#xff08;递归神经网络&#xff09;主要存在以下几个问题&#xff1a; 梯度消失和梯度爆炸&#xff1a;这是RNN最主要的问题。由于序列的长距离依赖&#xff0c;当错误通过层传播时&#xff0c;梯度可以变得非常小&#xff08;消失…

【产品经理修炼之道】- 需求挖掘之手机话费充值

画原型图从来就不是面试考察的重点&#xff0c;分析、解决问题才是产品经理的核心能力。那么该如何积累产品经验呢&#xff1f;本文以以「手机话费充值」为案例&#xff0c;分享整个设计流程和思路&#xff0c;希望对你有所启发。 不少产品新人有个误区&#xff1a;产品经理的日…

C#带引导窗体的窗体设计方法:创建特殊窗体

目录 1.设计操作流程 2.实例 &#xff08;1&#xff09;Resources.Designer.cs &#xff08;2&#xff09;Frm_Main.Designer.cs &#xff08;3&#xff09;Frm_Main.cs &#xff08;4&#xff09;Frm_Start.Designer.cs &#xff08;5&#xff09;Frm_Start.cs &#…

调用另一个程序的数据 IMPORT EXPORT MEMORY ID

*字段介绍&#xff1a; *1.SELNAME 屏幕字段名 *2.KIND 参数类型 P PARAMETER S SELECT-OPTION *3.其他的字段和SELECT-OPTION 一样 SUBMIT xxx VIA SELECTION-SCREEN "要不要显示选择屏幕 WITH SELECTION-TABLE xxx "选择屏幕的值 AND RETURN . 利用SUBMIT XXX …