小清新DP题(多做多想)

news2024/12/23 3:31:02

牛客小白月赛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.coloradmin.cn/o/1627949.html

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

相关文章

VirtualBox7.0.16的蓝屏大坑与ssh登陆ubuntu虚拟机的办法

背景&#xff1a; 安装了最新版的VirtualBox&#xff0c;装了ubuntu系统&#xff0c;在win10下通过ssh死活无法与ubuntu进行正常登陆控制。 然后开始了踩坑。 问题1&#xff1a;ssh登陆失败&#xff0c;但是主机能ping通ubuntu&#xff0c;反过来也能ping通&#xff0c;网络…

Python常用包介绍

数据处理 1.numpy&#xff08;数据处理和科学计算&#xff09; import numpy as np np.set_printoptions(precision2, suppressTrue) # 设置打印选项&#xff0c;保留两位小数&#xff0c;禁止科学计数法arr np.arange(1, 6) # 使用arange函数创建数组 print(arr)# 输出&…

HarmonyOS 实战开发-MindSpore Lite引擎进行模型推理

场景介绍 MindSpore Lite 是一款 AI 引擎&#xff0c;它提供了面向不同硬件设备 AI 模型推理的功能&#xff0c;目前已经在图像分类、目标识别、人脸识别、文字识别等应用中广泛使用。 本文介绍使用 MindSpore Lite 推理引擎进行模型推理的通用开发流程。 基本概念 在进行开…

MyBatis入门学习三(缓存、高级查询、分页 插件)

目录 1、MyBatis缓存 1.1 一级缓存 1.2 二级缓存 1.2.1 MyBatis实现 1.2.2 第三方实现 2、高级查询 2.1 数据模型 2.2 创建数据库表 2.3 一对一查询 2.3.1 第一种方式 2.3.2 第二种方式 2.4 一对多查询 2.5 多对多查询 2.6 延迟加载 3、分页插件 1、MyBatis缓存 …

mac上安装Tomcat

1. 简介 Tomcat 是一个开源的 Java 服务器&#xff0c;它实现了 Java Servlet、JavaServer Pages&#xff08;JSP&#xff09;和Java WebSocket 技术。Tomcat 是 Apache 软件基金会的一个项目&#xff0c;是一个轻量级、高性能的 Web 容器。作为一个 Web 服务器&#xff0c;To…

PostgreSQL的扩展(extensions)-常用的扩展之pg_repack

PostgreSQL的扩展&#xff08;extensions&#xff09;-常用的扩展之pg_repack pg_repack 是一款非常有用的 PostgreSQL 扩展工具&#xff0c;它能够重新打包&#xff08;repack&#xff09;表和索引以回收空间并减少碎片&#xff0c;而且在这个过程中不会锁定表&#xff0c;允…

2024年深圳杯东三省数学建模联赛A题论文首发+问题一代码分享

深圳杯A题论文代码分享资料链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1L2NVgoefSW-yuqZjEB3wcw 提取码&#xff1a;sxjm 基于优化模型的多个火箭残骸的准确定位 摘要 在现代航天技术中&#xff0c;火箭是实现空间探索的关键工具。由于火箭发射过程中的高成…

【论文笔记 | 异步联邦】PORT:How Asynchronous can Federated Learning Be?

1. 论文信息 How Asynchronous can Federated Learning Be?2022 IEEE/ACM 30th International Symposium on Quality of Service (IWQoS). IEEE, 2022&#xff0c;不属于ccf认定 2. introduction 2.1. 背景&#xff1a; 现有的异步FL文献中设计的启发式方法都只反映设计空…

vue echarts 饼图(环形图)

vue echarts 饼图(环形图) &#xff0c;echarts版本为5.3.3 可以自定义颜色 <template><div><div id"pieChart1" ref"pieChartRef1" style"width: 100%; height: 250px"></div></div></template><scri…

备考2024年小学生古诗文大会:做做10道历年真题和知识点(持续)

根据往年的安排&#xff0c;2024年上海市小学生古诗文大会预计还有一个月就将启动。我们继续来随机看10道往年的上海小学生古诗文大会真题&#xff0c;这些题目来自我去重、合并后的1700在线题库&#xff0c;每道题我都提供了参考答案和独家解析。 根据往期的经验&#xff0c;只…

《ESP8266通信指南》7-Arduino 开发8266的环境配置与示例代码烧录

往期 《ESP8266通信指南》6-创建TCP服务器&#xff08;AT指令&#xff09;-CSDN博客 《ESP8266通信指南》5-TCP通信透传模式(AT指令)-CSDN博客 《ESP8266通信指南》4-以Client进行TCP通信&#xff08;AT指令&#xff09;-CSDN博客 《ESP8266通信指南》3-常用AT指令详解-826…

又重新搭了个个人博客

哈喽大家好&#xff0c;我是咸鱼。 前段时间看到一个学弟写了篇用 Hexo 搭建博客的教程&#xff0c;心中沉寂已久的激情重新被点燃起来。&#xff08;以前搞过一个个人网站&#xff0c;但是因为种种原因最后不了了之&#xff09; 于是花了一天时间参考教程搭了个博客网站&…

LM2576D2TR4-5G 3.0安15伏降压开关稳压器 PDF中文资料_参数_引脚图

LM2576D2TR4-5G 规格信息&#xff1a; 制造商:ON Semiconductor 产品种类:开关稳压器 RoHS:是 装置风格:SMD/SMT 封装 / 箱体:TO-263-5 输出电压:5 V 输出电流:3 A 输出端数量:1 Output 最大输入电压:45 V 拓扑结构:Buck 最小输入电压:7 V 开关频率:52 kHz 最小工作…

设计模式——终止模式之两阶段终止模式

文章目录 1. 错误思路2. 两阶段终止模式2.1 利用 isInterrupted2.2 利用停止标记interrupt-打断park Two Phase Termination 在一个线程 T1 中如何“优雅”终止线程 T2&#xff1f;这里的【优雅】指的是给 T2 一个料理后事的机会。 1. 错误思路 使用线程对象的 stop() 方法停…

在Elasticsearch 7.9.2中安装IK分词器并进行自定义词典配置

Elasticsearch是一个强大的开源搜索引擎&#xff0c;而IK分词器是针对中文文本分析的重要插件。本文将引导您完成在Elasticsearch 7.9.2版本中安装IK分词器、配置自定义词典以及验证分词效果的全过程。 步骤一&#xff1a;下载IK分词器 访问IK分词器的GitHub发布页面&#xf…

Unity打开Android文件管理器并加载文件

1、在AssetStore商店中加入免费插件 2、调用代码 3、使用UnityWebRequest加载路径数据

Jackson 2.x 系列【31】Spring Boot 集成之字典回写

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 本系列Spring Boot 版本 3.2.4 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 场景描述2. 案例演示2.1 修改枚举2.2 定义注解…

总结一下背包里的顺序和是否逆序

1.对于01背包而言&#xff0c;一维压缩态只能物品到背包且需要逆序 2.对应多重背包而言&#xff0c;组合数物品到背包&#xff0c;排列数背包到物品&#xff0c;且都需要正序

军工单位安全内网文件导出,怎样做到严密的安全管控?

军工单位是指承担国家下达的军事装备、产品研制、生产计划任务的企、事业单位&#xff0c;主要包括电子工业部、航空工业总公司、航天工业总公司、兵器工业总公司、核工业总公司、船舶工业总公司、中国工程物理研究院及各省国防工业办公室等。 军工单位的特点主要体现在以下几个…

光伏无人机:巡检无人机解决巡检难题

随着科技的飞速发展&#xff0c;无人机技术已经广泛应用于各个领域&#xff0c;其中光伏无人机在解决光伏电站巡检难题方面发挥了重要作用。光伏无人机以其高效、精准、安全的特点&#xff0c;为光伏电站的巡检工作带来了革命性的变革。 光伏电站通常位于广阔的户外场地&#x…