dp的练习总结(9)

news2024/11/15 15:49:17

P8766 异或三角

1.由题干给出的条件可知:

        (1)1≤a,b,c≤n,可得上限和枚举的范围

        (2)a⊕b⊕c=0,只有当前位相同的二进制数字异或才是 0,所以由此可知,当前位 a,b,c 都选 0,或 a,b,c 中任意两个数选择 1。同时又因为三个数字每个都需要选择一次 1,所以需要操作两次。所以 a,b,c 中有两数首位 1 的位置不同,另外一数则在两数只有一个 1 的基础上有两个 1。所以三数互不相同。

        (3)长度为 a,b,c 的三条边能组成一个三角形,由三角形的性质可得三角形两边之和大于第三边,若b+c>a,必须存在一次b,c选1 a选0

2.可知有4种状态:

        a,b,c 在之前包括现在的二进制位都选 0。

        a,b 选过了 1。

        a,b 和 a,c 选过了 1。

        a,b 和 a,c 与 b,c 都选过 1。

3.对于 a 来说,若之前的二进制位选择的数字与 n 相等的话,若 n 的当前位为 0,则当前位 a 不能选 1,否则就比 n 大了。所以我们可以将 dp 增加一维,分两种情况:

        a 在之前都与 n 相等。

        a 在之前有一次 a<n。

4.用dp(i,j,k)表示在第 i 位二进制位;a 的状态为 j,j=1 的时候代表 a=n,j=2 的时候代表 a<n;k 代表四种状态。

所以答案ans=( f(idx,0,4)+f(idx,1,4) )*6

经过漫长的思考,最后代码奉上:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=35;
int T,n;
int f[N][5][10],now[N];
inline int read(){
	int t=0,f=1;
	register char c=getchar();
	while (c<48||c>57) f=(c=='-')?(-1):(f),c=getchar();
	while (c>=48&&c<=57)t=(t<<1)+(t<<3)+(c^48),c=getchar();
	return f*t;
}
void solve(){
	memset(f,0,sizeof(f));
	memset(now,0,sizeof(now));
	int idx=0;
	while(n){
		now[++idx]=n&1;
		n>>=1;
	}
	f[idx+1][1][1]=1;
	for(int i=idx;i>=1;i--){
		f[i][1][1]=(now[i]==1)?(0):(f[i+1][1][1]); 
		f[i][1][2]=(now[i]==1)?(f[i+1][1][2]+f[i+1][1][1]):(f[i+1][1][2]); 
		f[i][1][3]=(now[i]==1)?(f[i+1][1][2]+f[i+1][1][3]*2):(f[i+1][1][3]);
		f[i][1][4]=(now[i]==1)?(f[i+1][1][4]*2):(f[i+1][1][4]*2+f[i+1][1][3]);
		f[i][0][1]=1;
		f[i][0][2]=((now[i]==1)?(f[i+1][1][2]):(0))+f[i+1][0][1]+f[i+1][0][2]*2;
		f[i][0][3]=((now[i]==1)?(f[i+1][1][3]):(0))+f[i+1][0][2]+f[i+1][0][3]*3;
		f[i][0][4]=((now[i]==1)?(f[i+1][1][4]*2+f[i+1][1][3]):(0))+f[i+1][0][3]+f[i+1][0][4]*4;
	}
	cout<<f[1][1][4]*6+f[1][0][4]*6<<endl;
}
signed main(){
	T=read();
	while(T--){
		n=read();
		solve();
	}
	return 0;
}

P6499 Burza

1.需要证明k≥\sqrt{n}时,一定是 Daniel 赢。

根的深度为 0,显然我们不需要考虑所有深度 ≥k 的节点以及没有深度 ≥k 的子孙的节点。我们现在要标记上 k 个节点使得从根到任何一个叶子的路径上都有点被标记。

根据贪心可以知道,第 i 次一定会标记第 i 层的某个节点,同时每一次至少会额外使得一个叶子到根的路径上有节点被标记(否则就说明所有的叶子到根的路径都被标记过了)。

所有节点数 ≤{_k{}}^{2}+1 的树一定是 Daniel 赢,也就是 n≤{_k{}}^{2}+1,即 k≥\sqrt{n}​ 的时候,Daniel 一定赢。

2.所有深度 >k 的节点是无用的,而标记 i 相当于标记所有 i 子树里深度为 k 的节点,所以我们把树用 dfs 序重新编号,并且只记录深度为 k 的节点,设 Li,Ri 为 dfs 序中 i 的子树里新编号最小和最:大的深度为 k 的节点,di​ 是 i 的深度。转化问题:

        问题变成了给定 Li​,Ri​,di​,第 i 个节点可以覆盖 [Li​,Ri​],求是否可以选出一些节点,使得它们覆盖整个区间,且没有深度重复的节点。

这样可以状压 dp,设 fi,S​ 是是否可以用 S 中节点覆盖新编号前 i 个节点(是为 1,否为 0)。

#include <bits/stdc++.h>
using namespace std;
const int N = 405, K = 20;
int n, k, u, v, cnt, ans, L[N], R[N], fa, depth[N], f[N][1 << K];
vector<int> G[N], qwq[N];
void dfs(int u, int fa, int dep) {
	L[u] = cnt, depth[u] = dep;
	if (dep == k - 1) { L[u] = cnt ++, R[u] = cnt; return; }
	for (int v : G[u])
		if (v != fa) dfs(v, u, dep + 1);
	R[u] = cnt;
}
int main() {
	cin >> n >> k;
	if (n <= k * k) puts("DA"), exit(0);
	for (int i = 1; i < n; i ++)
		cin >> u >> v, G[u].push_back(v), G[v].push_back(u);
	dfs(1, 0, -1), f[0][0] = 1;
	for (int i = 2; i <= n; i ++) qwq[L[i]].push_back(i);
	for (int i = 0; i <= cnt; i ++)
		for (int j = 0; j < 1 << k; j ++) {
			if (!f[i][j]) continue;
			for (int v : qwq[i])
				if (!(j & 1 << depth[v])) f[R[v]][j | 1 << depth[v]] |= f[i][j];
		}
	for (int i = 0; i < 1 << k; i ++)
		if (f[cnt][i]) ans = 1;
	puts(ans ? "DA" : "NE");
	return 0;
}

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

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

相关文章

Linux jobs命令:查看和管理后台任务

目录 一、jobs命令简介二、jobs命令适用的Linux版本三、jobs命令的基本语法四、jobs命令的常用选项或参数五、jobs命令实例5.1 显示当前shell中的后台作业将命令放到后台查看后台作业状态将后台作业带到前台 5.2 显示后台作业的进程号5.3 显示已停止的后台作业5.4 显示上次shel…

it程序员常用的技术社区网站有哪些

it程序员常用的技术社区网站有哪些??作为程序员&#xff0c;选择好合适的开发社区对提高自己的编程能力会有很大的帮助&#xff0c;技术人员经常会在各种技术交流社区游逛。优秀的实时开发社区确实能帮你积累不少开发经验技术教程 _ 网址大全 _ 博科趣 - 第1页技术教程网站,技…

cuda性能分析工具: nsight systems

安装 1. 安装nsys&#xff0c; nsys可以用命令行生成性能分析报告&#xff0c;参考&#xff1a; nsys profile 2. 安装Nsight Systems可视化工具NVIDIA Nsight Systems | NVIDIA 开发者 使用方法 1. 找一个可执行的cuda程序&#xff0c;编译成可执行文件&#xff0c;比如m…

14-17岁未成年如何办理能一直用的手机卡?

14-17岁未成年如何办理能一直用的手机卡&#xff1f; 有些姐妹要去外面上学&#xff0c;都想要一张属于自己的手机卡。 但是因为反诈的原因&#xff0c;对于手机卡的申领特别严格。 很多不满18岁的人能申领的卡&#xff0c;都是物联卡或者纯流量卡&#xff0c;只能上网&#x…

pytorch深度学习基础 6(简单的参数估计学习2)

上一节我们建立了一个简单的模型进行分析散点图&#xff0c;利用均方差来实现损失函数的计算&#xff0c;但是并没有计算出具体的参数值&#xff0c;这次我们来计算损失函数的损失值以及不断减小损失值&#xff0c;计算出最优的参数&#xff0c;代码原理非常简单大家可以自行理…

TOMCAT-企业级WEB应用服务器

一 WEB技术 1.1 HTTP协议和B/S 结构 HTTP&#xff08;HyperText Transfer Protocol&#xff09;协议即超文本传输协议&#xff0c;是用于在万维网&#xff08;WWW&#xff09;上传输超文本内容的基础协议。 一、HTTP 协议的特点 1、简单快速 客户向服务器请求服务时&#…

八股(3)——计网

八股&#xff08;3&#xff09;——计网 3. 计算机基础3.1 计算机网络OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f;TCP/IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f;1. 应用层&#xff08;Application layer&#xff09;2. 传输层&#xff…

【iOS安全】iPhone8 iOS14.4.2 越狱教程

环境配置 iPhone 8&#xff1a; 固件版本 iOS 14.4.2 (18D70) 产品类型 iPhone10,1 (A1906) 销售型号 MQ862J/A MacBook Pro&#xff1a; macOS 10.15.7 装有CheckRa1n beta 0.12.4 概述 尝试了几个版本的unc0ver和Taurine&#xff0c;发现都不好使 unc0ver显示unsupported…

如何实现一棵AVL树

目录 1.什么是AVL树&#xff1f; 2.AVL树的实现 2.1AVL树结点的定义 2.2AVL树的插入 2.2.1插入的步骤 2.2.2插入情况分析 2.2.3旋转操作的分析 2.3AVL树的查找 3.AVL树的验证 4.AVL树的性能分析 1.什么是AVL树&#xff1f; AVL树其实就是一棵加了限制条件的二叉搜索树…

day38.动态规划+MySql数据库复习

844.比较含退格的字符串 给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。 注意&#xff1a;如果对空文本输入退格字符&#xff0c;文本继续为空 思路:定义两个栈&#xff0c;将字符…

集合及数据结构第九节————树和二叉树

系列文章目录 集合及数据结构第九节————树和二叉树 树和二叉树 树型结构的概念树的概念树的表示形式&#xff08;了解&#xff09;树的应用二叉树的概念两种特殊的二叉树二叉树的性质二叉树的性质练习二叉树的存储二叉树的遍历二叉树的基本操作二叉树相关练习题 文章目录…

flutter 中 ssl 双向证书校验

SSL 证书&#xff1a; 在处理 https 请求的时候&#xff0c;通常可以使用 中间人攻击的方式 获取 https 请求以及响应参数。应为通常我们是 SSL 单向认证&#xff0c;服务器并没有验证我们的客户端的证书。为了防止这种中间人攻击的情况。我么可以通过 ssl 双向认证的方式。即…

Leetcode JAVA刷刷站(91)解码方法

一、题目概述 二、思路方向 这个问题是一个典型的动态规划问题&#xff0c;其中我们可以使用一个数组来存储到达每个位置时的解码方法的总数。 我们定义一个数组 dp&#xff0c;其中 dp[i] 表示字符串 s 的前 i 个字符&#xff08;从索引 0 到 i-1&#xff09;的解码方法总数。…

企业数字化转型管控平台探索 ---基于流程的企业经络管理框架DEM

篇幅有限&#xff0c;获取完整内容、更多感兴趣的内容 见下图

OpenCV几何图像变换(8)调整图像大小的函数resize()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 resize 函数调整图像 src 的大小&#xff0c;使其缩小或放大至指定的大小。需要注意的是&#xff0c;初始的 dst 类型或大小不被考虑。相反&…

解决Jasper Studio报表工具中预览正常显示,但部署到服务器上面无法正常显示的问题

目录 1.1、错误描述 1.2、解决方案 1.1、错误描述 之前有遇到过一个Jasper Studio报表开发相关的问题&#xff0c;这里记录一下&#xff0c;方便其他小伙伴可以快速解决问题。问题是这样的&#xff1a;当我在Jasper Studio报表工具里面设计好样式之后&#xff0c;预览报表发…

[论文阅读] mobile aloha实验部分

DP:[1] CHI C, FENG S, DU Y, et al. Diffusion Policy: Visuomotor Policy Learning via Action Diffusion[J]. 2023. Diffusion Policy: Visuomotor Policy Learning via Action Diffusion精读笔记&#xff08;一&#xff09;-CSDN博客 VINN:[1] PARI J, SHAFIULLAH N, ARU…

视频达人的秘密武器:全能型剪辑软件深度剖析

剪辑视频&#xff0c;作为视频创作过程中的关键环节&#xff0c;其重要性不言而喻。无论是专业影视制作团队&#xff0c;还是热衷于Vlog创作的个人&#xff0c;都离不开一款强大且易用的视频剪辑工具。今天&#xff0c;就让我们一起踏上一场探索之旅&#xff0c;对市面上的视频…

java基础 之 关键字static

文章目录 前言1、特征2、修饰变量3、修饰方法4、修饰代码块优缺点应用场景代码理解 前言 本文主要是从类与对象的方向来讲&#xff0c;所以在文章开始前&#xff0c;我们先理解一下类和对象 类是一个模板&#xff0c;对象是一个实例。 如【手机】是一个类&#xff08;一个模板…

MySQL系统性的学习--基础

学习资料是黑马的mysql课程 Mysql概述 相关概念 数据模型 关系型数据库 数据模型 SQL SQL通用语法 SQL分类 DDL 数据库操作 表操作 查询 创建 数据类型 修改/删除 DML 添加数据INSERT 修改数据UPDATE 删除数据DELETE DQL 基础查询 条件查询 聚合函数 分组查询 排序查询 分…