备战蓝桥杯---DP刷题2

1.树形DP:

即问那几个点在树的直径上,类似ROAD那题,我们先求一下每一个子树根的子树的最大值与次大值用d1,d2表示,直径就是d1+d2的最大值,那么我们如何判断是否在最大路径上,其实就是看一下从某一点出发的所有路劲(可以向父节点)的最大2条的和==直径,就在!因此我们还要维护一下向上的最大值(自上而下),我们假设j是i的父节点,此时i如果选择向j走,那么它可以向上即up[j],也可以向下即d1[j],假如d1[j]就是i到J的边,那么我们选d2[j],

下面是AC代码(注意更新时只考虑d1,对于一个父节点,不会用d2,否则就冲突了):

#include<bits/stdc++.h>
using namespace std;
const int N=200010,M=2*N;
int n;
int h[N],e[M],ne[M],idx;
int d1[N],d2[N],p1[N],up[N];
int maxd;
void add(int a,int b){e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}
void dfs_d(int u,int fa){for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];if(j==fa) continue;dfs_d(j,u);int dis=d1[j]+1;if(dis>d1[u]){d2[u]=d1[u];d1[u]=dis;p1[u]=j;}else if(dis>d2[u]) d2[u]=dis;}maxd=max(maxd,d1[u]+d2[u]);
}
void dfs_u(int u,int fa){for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];if(j==fa) continue;up[j]=up[u]+1;if(p1[u]==j){up[j]=max(up[j],d2[u]+1);}else up[j]=max(up[j],d1[u]+1);dfs_u(j,u);}
}
int main(){cin>>n;memset(h,-1,sizeof(h));for(int i=0;i<n-1;i++){int a,b;scanf("%d%d",&a,&b);add(a,b);add(b,a);}dfs_d(0,-1);dfs_u(0,-1);for(int i=0;i<n;i++){int d[3]={d1[i],d2[i],up[i]};sort(d,d+3);if(d[1]+d[2]==maxd) printf("%d\n",i);}
}

2.DP+矩阵快速幂:

首先不考虑规模,我们用f[i][j]表示由i个帅子在一起最上面数字为j的所有合法方案。

我们枚举第i-1个帅子的最上面,总共就是f[i][j]=4(f[i-1][1]+...+f[i-1][6]).

我们考虑限制,我们假设2不能贴1,也就是说最上面是2的话加1后最上面不能是5,那么前面的系数要么是0,要么是4.

又由于每一层的限制完全一样,我们考虑矩阵快速幂。

【f[i][1],f[1][2],f[i][3],f[i][4],f[i][5],f[i][6]】=【f[i-1][1],f[i-1][2],f[i-1][3],f[i-1][4],f[i-1][5],f[i-1][6]】*A(6*6的矩阵)

如何构造矩阵?原来填满了4

假如1与2不能相邻,即1不能5,2不能4,即我们把第一行第5列变为0,同理(2,4)变为0,即题目给了(x,y),我们就把(x,y(对应)),(y,x(对应))变为0。

下面是AC代码:

注意这里我们扩充了含有f的矩阵(为了方便)

#include<bits/stdc++.h>
using namespace std;
const int N=6;
int n,m,mod=1e9+7;
int ge(int x){if(x>=3) return x-3;return x+3;
}
int t[N][N];
void mul(int c[][N],int a[][N],int b[][N]){memset(t,0,sizeof(t));for(int i=0;i<6;i++){for(int j=0;j<6;j++){for(int k=0;k<6;k++){t[i][j]=(t[i][j]+(long long)a[i][k]*b[k][j])%mod;}}}memcpy(c,t,sizeof(t));
}
int main(){cin>>n>>m;int a[N][N];for(int i=0;i<N;i++){for(int j=0;j<N;j++){a[i][j]=4;}}while(m--){int x,y;cin>>x>>y;x--,y--;a[x][ge(y)]=0;a[y][ge(x)]=0;}int f[N][N]={4,4,4,4,4,4};//其他扩充0for(int k=n-1;k;k>>=1){if(k&1) mul(f,f,a);mul(a,a,a);}int res=0;for(int i=0;i<6;i++) res=(res+f[0][i])%mod;cout<<res;
}

3.DP

我们令f[i][j][k][c]表示走到(i,j)已经取了k个物品最后物品价值c的集合。

首先我们按照往下走和往右走来分,我们再分取和不取,取的话再枚举前一个即可。

注意边界f[1][1][0][-1](这里就可以让后面任何数都可)f[1][1][1][w[1]]

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N=55,mod=1e9+7;
int n,m,k;
int w[N][N];
int f[N][N][13][14];
int main(){cin>>n>>m>>k;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>w[i][j];w[i][j]++;}}f[1][1][1][w[1][1]]=1;f[1][1][0][0]=1;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){for(int u=0;u<=k;u++){for(int v=0;v<=13;v++){int &vv=f[i][j][u][v];vv=(vv+f[i-1][j][u][v])%mod;vv=(vv+f[i][j-1][u][v])%mod;if(u>0&&v==w[i][j]){for(int c=0;c<v;c++){vv=(vv+f[i-1][j][u-1][c])%mod;vv=(vv+f[i][j-1][u-1][c])%mod;}}}}}}int res=0;for(int i=0;i<=13;i++) res=(res+f[n][m][k][i])%mod;cout<<res;
}

4.DP

我们假设第一项x,第二项x+d1,第三项x+d1+d2.

nx+(n-1)d1+(n-2)d2+...dn-1=s

此时x属于任意整数,我们转化一下,x=(s-(n-1)d1-...)/n为整数。

于是我们只要让(n-i)di%n求和与s%n相同,这样子就是组合问题。

我们令f[i][j]表示所有只考虑前i项当前和%n==j的方案,

易得转移方程:f[i][j]=f[i-1][(j-ia)%n]+f[i-1][(j+ib)%n].

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

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

相关文章

还得是抖音,字节推出竖屏视频理解数据集,入选CVPR2024

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 短视频在当下社交媒体逐渐成为主导的视频格式。传统视频处理技术和研究一般都专注于横屏视频…

58商铺全新UI试客试用平台网站php源码

探索未来商铺新纪元&#xff0c;58商铺全新UI试客试用平台网站PHP源码完整版震撼来袭&#xff01; 在这个数字化飞速发展的时代&#xff0c;58商铺一直致力于为商家和消费者打造更加便捷、高效的交易平台。今天&#xff0c;我们荣幸地推出全新UI试客试用平台网站PHP源码完整版…

C/C++ 项目:分别用精密星历和广播星历计算卫星坐标

文章目录 Part.I IntroductionChap.I rinex.hChap.II gmain_body.h Part.II 使用方法扩展阅读 Part.I Introduction 本文将介绍一个小项目的使用方法&#xff0c;此项目可用精密星历和广播星历计算卫星位置&#xff0c;并将两者结果做差&#xff0c;输出至文件。 其实 『分别…

SWM341系列应用(上位机应用)

SWM341系列之上位机应用 1、分级图像和PNG、JPG的应用 现象&#xff1a;客户使用SWM34SVET6HMI_0.4.1版本上位机进行UI界面布局&#xff0c;反馈在模拟运行时&#xff08;PC端&#xff09;流畅&#xff0c;在Demo平台&#xff08;设备端&#xff09;运行卡顿。 分析及解决&…

【fastadmin】脚本模式下,日志钩子函数执行出现死循环,导致内存溢出奔溃

问题出现原因是想对项目中error级别的日志&#xff0c;接入钉钉告警&#xff0c;方便查看 于是使用钩子方法&#xff0c;日志写入完成后&#xff0c;自动调用自定义的告警方法中 1、在application/tags.php 中添加log_write_done > [app\\common\\behavior\\Common, ],2、在…

【THM】Nmap Post Port Scans(后端口扫描)-初级渗透测试

介绍 本房间是 Nmap 系列的最后一个(网络安全简介模块的一部分)。在这个房间中,我们重点关注端口扫描之后的步骤:特别是服务检测、操作系统检测、Nmap脚本引擎和保存扫描结果。 Nmap实时主机发现Nmap基本端口扫描Nmap高级端口扫描Nmap后端口扫描在本系列的第一个房间中,我…

代码随想录第29天|491.递增子序列 46.全排列 47.全排列 II

目录&#xff1a; 491.递增子序列 46.全排列 47.全排列 II 491.递增子序列 491. 非递减子序列 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序列_哔哩哔哩_bili…

DTFT及其反变换的直观理解

对于离散时间傅里叶变换(DTFT)及其反变换的讲解&#xff0c;教材里通常会先给出DTFT正变换的公式&#xff0c;再举个DTFT的简单变换例子&#xff0c;推导一下DTFT的性质&#xff0c;然后给出DTFT反变换的公式&#xff0c;再证明一下正变换和反变化的对应关系。总的来说就是&…

Spring-IoC 基于xml管理

现大多使用注解方式&#xff0c;xml方式并不简洁&#xff0c;本文仅记录xml用作基础学习。 0、前提 首先在父项目的pom.xml中配置好依赖们。然后子模块也可以使用这些依赖。 在resource目录下创建Spring的xml文件&#xff0c;名称无要求&#xff0c;本文使用bean.xml。文件最…

黄锈水过滤器 卫生热水工业循环水色度水处理器厂家工作原理动画

​ 1&#xff1a;黄锈水处理器介绍 黄锈水处理器是一种专门用于处理“黄锈水”的设备&#xff0c;它采用机电一体化设计&#xff0c;安装方便&#xff0c;操作简单&#xff0c;且运行费用极低。这种处理器主要由数码射频发生器、射频换能器、活性过滤体三部分组成&#xff0c;…

uniapp uni.scss中使用@mixin混入,在文件引入@include 样式不生效 Error: Undefined mixin.(踩坑记录一)

问题&#xff1a; 在uni.scss文件定义mixin 2. 在vue文件引入: 3. 出现报错信息: 4. 问题思考&#xff1a; 是不是需要引入uni.scss &#xff1f; 答案不需要 uni.scss是一个特殊文件&#xff0c;在代码中无需 import 这个文件即可在scss代码中使用这里的样式变量。uni-app的…

原创【matcap材质在ue4中的实现办法】

matcap材质在ue4中的实现办法 2023-08-29 15:34 https://www.bilibili.com/video/BV1GR4y1b76n/?spm_id_from333.337.search-card.all.click&vd_sourced76b773892c830a157c0ccc97ba78411 评论(0)

《C Prime Plus》02

1. UNIX 系统 C语言因UNIX系统而生&#xff0c;也因此而流行&#xff0c;所以我们从UNIX系统开始&#xff08;注意&#xff1a;我们提到的UNIX还包含其他系统&#xff0c;如FreeBSD&#xff0c;它是UNIX的一个分支&#xff0c;但是由于法律原因不使用该名称&#xff09;。 UN…

【运输层】网络数据报协议 UDP

目录 1、UDP 的特点 2、UDP 的首部格式 UDP 只在 IP 协议之上增加了很少的一些功能&#xff0c;比如复用、分用以及差错检测等。 1、UDP 的特点 UDP是无连接的&#xff0c;即发送数据之前不需要建立连接&#xff0c;因此减少了开销和发送数据之前的时延。 UDP使用尽最大努力…

基于vscode Arduino插件开发Arduino项目

基于vscode Arduino插件开发arduino项目 插件配置问题记录1. 指定编译输出文件夹2. 编译下载时不输出详细信息3. 输出端口信息乱码4. 通过串口输出中文&#xff0c;vscode对应的串口助手上会显示乱码&#xff08;未解决&#xff09; 插件配置 环境&#xff1a;Arduino插件版本…

苏州金龙助力旅游客运加速蜕变

近日&#xff0c;北京铭悦旅游客运有限公司又迎来一批苏州金龙海格纯电动客车。&#xff08;以下简称北京铭悦旅游&#xff09;总经理郭保生在车辆交付时说到&#xff0c;“为迎接强劲复苏的旅游市场&#xff0c;要求旅游客运向绿色客运转型&#xff0c;以及人民对品质生活、美…

【LeetCode热题100】51. N 皇后(回溯)

一.题目要求 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方…

4.3学习总结

[HNCTF 2022 WEEK2]Canyource&#xff08;无参数&#xff09; 通过这题又接触了一种无参数RCE的方法&#xff0c;前面学习的getallheaders只有在apache环境下才能使用&#xff0c;具有一定的局限性 这里是利用php函数来构造读取flag的方法 localeconv() – 函数返回一个包含本…

当Pycharm中右键运行python程序时出现Run ‘pytest in tests ***py‘,如何解决?

1、在Pycharm中右键运行python程序时出现Run pytest in tests ***py &#xff0c;这是进入了Pytest模式。 2、解决办法 进入到File->Settings->Tools->Python integrated Tools页面或者快捷键&#xff08;CtrlAltS&#xff09; 找到Testing下的Default test runner …

Ubuntu Desktop 安装有道词典

Ubuntu Desktop 安装有道词典 1. 有道词典2. Installation2.1. 解压 deb 包到 youdao 目录2.2. 解压 deb 包中的 control 信息 (包的依赖写在该文件里面)2.3. 编辑 control 文件&#xff0c;删除依赖里面的 gstreamer0.10-plugins-ugly2.4. 创建 youdaobuild 目录&#xff0c;重…