UVA 1252 Twenty Question (集合DP,时间优化)

工业互联网工控安全与工业质检AI大模型建设方案.pptx 立即下载

UVA 1252 Twenty Question (集合DP,时间优化)

用d(s,a)表示当前状体,集合s表示已询问的特征,集合a表示已询问的特征里面属于目标物w的特征,则集合a一定位s的子集。

每一次询问对应着状态的转移,则可得到状态转移方程:
d(s,a)=min(d(s,a),max(d(s+k,a+k),d(s+k,a))+1) ,k表示询问的特征。

当有且仅有一个物体满足a集合中的所有特征,而不满足{s}-{a}中的所有特征,那么此时d(s,a)=0。

有二项式定理可以得知,状态数有O(3m)个,每次状态转移有m种策略。所以对于dp的时间复杂度是O(m*3m)。

为了避免在每次状态转移时判断满足条件的物体数,我们可以通过预处理,将每个d(s,a)状态下的满足a集合中的所有特征,而不满足{s}-{a}中的所有特征的物体数求出,记录在cnt(s,a)中,时间复杂度是O(n*2m),对于dp的时间复杂度,这可以忽略不计。

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int m,n;
int d[1<<11][1<<11];
int cnt[1<<11][1<<11];
int identity[130];
void init(void)
{
	memset(cnt,0,sizeof(cnt));
	memset(d,0x3f,sizeof(d));
	for(int i=0;i<(1<<m);i++)
	for(int j=0;j<n;j++)
	cnt[i][i&identity[j]]++;
}
int dp(int s,int a)
{
	if(d[s][a]!=INF)return d[s][a];
	if(cnt[s][a]==1)return d[s][a]=0;
	if(cnt[s][a]==2)return d[s][a]=1;
	for(int i=0;i<m;i++)
	if((s&(1<<i))==0)
		if(cnt[s|(1<<i)][a|(1<<i)]>=1&&cnt[s|(1<<i)][a]>=1)
		d[s][a]=min(d[s][a],max(dp(s|(1<<i),a|(1<<i)),dp(s|(1<<i),a))+1);
	return d[s][a];
}
void solve(void)
{
	init();
	printf("%d\n",dp(0,0));
}
int main(void)
{
//	freopen("out.txt","w",stdout);
	while(~scanf("%d%d",&m,&n)&&m)
	{
		memset(identity,0,sizeof(identity));
		string s;
		for(int i=0;i<n;i++)
		{
			cin>>s;
			for(int j=0;j<m;j++)
			if(s[j]=='1')identity[i]+=1<<j;
		}
		solve();
	}
//	fclose(stdout);
}
2024 《计算机网络》实验教学指导书.doc 立即下载

相关推荐

不平衡电网下自抗扰顺序模型预测PWM整流器控制仿真模型(Simulink仿真实现)

内容概要:本文围绕面向城市空中交通的多无人机路径规划问题展开研究,提出了一套融合全局规划、动态避障与局部协同调整的综合路径规划方法。研究内容涵盖基于改进RRT算法与图论的全局路径规划、基于动态风险场和动态窗口法(DWA)的模型预测控制实现动态避障,以及基于分布式协同控制的多无人机局部路径协同策略。通过Matlab平台构建仿真环境,在多种典型城市交通场景下对所提方法进行了系统性验证,结果表明该方法在路径安全性、编队稳定性与任务效率方面表现优异。文章还深入探讨了算法的创新点与未来研究方向,为复杂城市环境下多无人机系统的自主协同提供了理论支撑与技术路径。; 适合人群:具备自动化、控制理论、计算机科学或相关领域基础知识,从事无人机系统、智能交通、路径规划、多智能体协同控制等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①为城市空中交通系统中的多无人机安全、高效飞行提供可靠的路径规划解决方案;②支持在复杂、动态的城市场景中开展无人机自主导航、编队飞行与协同控制的技术研究与仿真验证。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注算法的具体实现细节、参数配置对性能的影响以及不同仿真场景下的实验设计,以深入理解各模块的集成逻辑与实际应用效果。

uva1252 Twenty Questions

A - Twenty Questions Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Practice UVA 1252 Appoint description: Description Download as PDF Consider a closed w

eeeaaaaa的专栏 462

linux下wayland协议修改键盘映射

linux下wayland协议,修改键盘映射,实验环境是Ubuntu24,其他wayland协议窗口应该也是可以的。

qq_15027967的博客 1068

UVA 1252 - Twenty Questions(状态压缩DP+记忆化搜索)

Consider a closed world and a set of features that are defined for all the objects in the world. Each feature can be answered with ``yes" or ``no". Using those features, we can identify any object fro

Remilia's 2176

cadence virtuoso 激励信号源

vpulse,vpwl,vsin,vsource信号源介绍

努力学习的IC小白 3万+

基于deepseek本地模型的本地知识库构建

通过以上步骤,你已经成功构建了一个基于 AnythingLLM 和 LM Studio 的本地知识库。这个系统不仅能够高效地存储和检索知识,还能结合强大的语言模型生成准确的回答。你可以根据自己的需求进一步扩展和优化这个系统,比如增加更多的文档格式支持、优化检索算法等。

qq_30178745的博客 1381

斐波那契数列以及Catalan数通项公式的推导

1、斐波那契数列的通项公式推导: 已知斐波那契数列的递推公式为f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2)f(n)=f(n−1)+f(n−2)且f(0)=0,f(1)=1f(0)=0,f(1)=1f(0)=0,f(1)=1。 设斐波那契数列的生成函数为F(x)F(x)F(x),F(x)=∑i=0nf(i)xiF(x)=\sum_{i=0}^nf(i)x^iF(x)=∑i=0n​f(i)xi。 ...

WedsonLin的博客 1947

基于DPLL算法解决3-SAT问题(C++实现)

近日看到一个3-SAT问题(Boolean SATisfiability Problem, 布尔逻辑可满足性问题),试着写了个算法求解。

qq_63241496的博客 2214

二次剩余与Cipolla算法

二次剩余与Cipolla算法 若存在x,使得 x2≡a(modp)x^2\equiv a \pmod{p}x2≡a(modp) 成立且a不是p的倍数,则称a为模p的二次剩余。 下文只讨论p为奇素数的情况。 1、模p二次剩余的个数 对于一个素数p,p的二次剩余有(p-1)/2个,非二次剩余有(p-1)/2个。 因为有(p−x)2≡x2(modp)(p-x)^2\equiv x^2 \pmod{p}(p−x)2≡x2(modp),所以在[1,(p-1)/2]范围内即可得到模p的所有二次剩余数,只需要证明在[1,

WedsonLin的博客 899

AI驱动的材料科学:从分子设计到性能预测

AI驱动的材料科学:从分子设计到性能预测 关键词: 材料科学 人工智能 分子设计 性能预测 机器学习 深度学习 摘要:

AI天才研究院 2187

Linux内核vmlinuz文件:了解和编程

vmlinuz文件是Linux操作系统中的内核镜像文件。它包含了Linux内核的压缩版本,用于引导和启动操作系统。vmlinuz文件通常是一个zImage格式的压缩内核镜像,其中包含了操作系统所需的核心功能和驱动程序。vmlinuz文件的名称可能会因Linux发行版和版本而有所不同,但它们的作用是相同的。在某些发行版中,vmlinuz文件可能被重命名为vmlinux或bzImage。

PixelDyno的博客 1350

Timus 1673(反欧拉函数)

Timus 1673(反欧拉函数) 题目链接 有题意可知,设第i个教授掌管的实验室编号为index,则满足index≡i(modN)index\equiv i\pmod Nindex≡i(modN);对于第k个同学,只去编号为index′=kx(k≥1)index'=kx(k\ge 1)index′=kx(k≥1)的实验室。如果第k个同学要获得考试资格,则满足如下同余方程组 {kx1≡1(modN)kx2≡2(modN)...kxN≡N(modN)\left\{\begin{matrix} kx_1\eq

WedsonLin的博客 663

YOLO11改进:轻量级改进 | 通用倒瓶颈(UIB)搜索块结合C3k2二次创新 | 轻量化之王MobileNetV4

通用倒瓶颈(UIB)搜索块替代YOLO11的C3k2

会AI的学姐 292

Miller-Rabin随机性素数测试方法

关于素数测试 素数测试就是判断一个整数是素数还是合数。一般判断素数p的方式是通过判断2到根号p内的整数是否可以整除p来实现。时间复杂度为O(p1/2)。如果p是一个m位二进制整数,m=floor(Ig(p+1)),O(p1/2)=O(2m/2)。 然而对于大整数而言,这样的时间复杂度显然是不可以接受的。 费马小定理:if n is prime   ∀a∈Zn∗ , an−1≡1(modn)if\space n\space is\

WedsonLin的博客 635

8、使用 TPCx - HCI 基准测试表征 HCI 集群的性能和弹性

本文详细介绍了 TPCx - HCI 基准测试,用于衡量超融合基础设施(HCI)集群的性能、稳定性和扩展性。TPCx - HCI 扩展了 TPCx - V 的理念,通过 Tile 架构和弹性特性,全面评估硬件、虚拟化、存储和网络组件的表现。文章还通过多个实验场景分析了负载均衡、数据布局和重新同步策略对性能的影响,并提出了部署和优化 HCI 集群的建议。

sun99的博客 179

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Codeforces Round #707 Div. 2/C Going Home

Codeforces Round #707 Div. 2/C Going Home 题意:在长度为N的数组A中找出满足ax+ay=aw+aza_x+a_y=a_w+a_zax​+ay​=aw​+az​的一组x,y,w,zx,y,w,zx,y,w,z,要求它们之间两两不同。(N≤2e5,1≤a[i]≤2.5e6(N\le 2e5,1\le a[i]\le 2.5e6(N≤2e5,1≤a[i]≤2.5e6 。 最简单直接的算法就是枚举序列中的(i,j)(i,j)(i,j)然后加以判断,这样做的做法是O(n2)O

WedsonLin的博客 610

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

关于概率的一些事(对于贝叶斯公式的一些初级理解)

关于概率的一些事 条件概率公式: P(A|B)=P(AB)/P(B)- - -111 当A,B事件相互独立时,有P(AB)=P(A)*P(B) P(B|A)=P(AB)/P(A)- - -222 联立111,222式,可得 P(A|B)=P(A)*P(B|A)/P(B)- - -333 333式也叫贝叶斯公式。 其中P(A)也叫先验概率(Prior probability),即在不知道B事件发生前,对A事件的一个主观评估的概率; P(A|B)也叫后验概率(Posterior probability),即在发

WedsonLin的博客 461

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

UVA 12563 (劲歌金曲)(多条件最优的动态规划问题)(01背包

UVA 12563 (劲歌金曲)(多条件最优的动态规划问题)(01背包) 依照题意可知,首要条件是:在t-1的时间内唱最多的歌曲数目,次要条件是:在不超过t-1的时间内唱的最久。 可以用dp_1[i]去表示在 i 时间内能唱的最多曲数。 用dp_2[i]去表示在 i 时间内能唱的最久时间。 状态转移的决策思想为: 1、如果在 j 时间内唱当前歌曲比不唱当前歌曲有着更大的歌曲数,那么同时更新dp_1和dp_2的值。 2、如果在 j 时间内唱当前歌曲和不唱当前歌曲有着一样的歌曲数,那么如果唱当前歌曲有着更长的唱

WedsonLin的博客 415

UVA1347(Tour)(DAG上的动态规划)

UVA1347(Tour)(DAG上的动态规划) 本题的难点主要在于状态的定义,即如何去表示节点的状态。 在紫书中,作者选择了dp(i,j)来表示第一个人走到了i点,第二个人走到了j点,且编号小于max(i,j)的节点都被走过。因为dp[i][j]和dp[j][i]是重复的,因此规定i>j。这样可以保证无后效性,因为小于max(i,j)的点都被选过了,接下来就是在大于max(i,j)里面选点,所以之后的状态不会影响到前面的状态。 接下来考虑状态如何转移,由于状态的定义,下一步只能向编号大于i的节点移动

WedsonLin的博客 413

扩展中国剩余定理(EXCRT)

扩展中国剩余定理(EXCRT) 中国剩余定理可以解形如下面的一元线性同余方程组: {ans≡x1(moda1)ans≡x2(moda2)ans≡x3(moda3)...ans≡xn(modan) \left\{\begin{matrix} ans\equiv x_1\pmod{a_1} \\ ans\equiv x_2\pmod{a_2} \\ ans\equiv x_3\pmod{a_3}\\ .\\ .\\ .\\ ans\equiv x_n\pmod{a_n} \end{matrix}\right.

WedsonLin的博客 407

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)/D

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)/D D.Two chandeliers 题意:给出两个无限循环序列A,B以及整数k,找出最小长度x满足对于1≤i≤x1\le i\le x1≤i≤x,恰好有k对ai≠bia_i\ne b_iai​​=bi​。 A序列的循环节长度为n,B序列为m。 对于序列A,B,找出循环节中所有的ai≠bia_i\ne b_iai​​=bi​的时间复杂度是O(nm)O

WedsonLin的博客 393

关于组合数取模

关于组合数取模 对于C(n,m) mod p (m<=n) 1、如果n,m比较,1<=m<=n<=1000,p<=1e9 可以用杨辉三角递推式去解决,用C[n][m]来储存C(n,m)的值,则递推式为: C[i][j] mod p=(C[i-1][j-1]+C[i-1][j]) mod p(1<=j<=i) C[i][0]=1 2、如果n,m较大,p较小(1<=m<=n<=1e18,p<=1e5 and p is prime) 可以用Luca

WedsonLin的博客 358

Codeforces Round #705 (Div. 2)/D. GCD of an Array

Codeforces Round #705 (Div. 2) D. GCD of an Array 题意:给出一个长度为n的数组,每次对其中一个元素进行乘法操作,然后询问整个数组的GCD。 首先肯定想到的是,对数组的元素进行质因数分解,然后每次更新只用更新单个元素的质因数表达式。同时维护所有元素共有质因数的最小次幂,以便求GCD。 之后需要考虑的式用什么数据结构来维护每个元素的质因数表达式和所有元素共有质因数的最小次幂。 1、对于维护每个元素的质因数表达式。如果用vector则不便于修改,方法之一是可以使用

WedsonLin的博客 352

UVA1601 The Morning after Halloween

UVA1601 The Morning after Halloween 本题型属于搜索题,通过bfs去枚举状态,从而找到解。然而该题的状态数上限是256的三次方,状态转移有5的3次方个方法,转移代价高。解决方法: 1、因为题目保证每2×2个方格一定有一个障碍,所以可以将所有空格提取出来。目的是在状态转移时不用每次去判断条件(越界、有障碍)。 2、双向bfs,将起点和终点同时放进队列。 3、A*算法。 锦上添花之举: 1、用编码(encoding)的方法将每个状态(节点的位置)压缩成一个整数再放进队列;取出来

WedsonLin的博客 348

UVA 10817 Headmaster‘s Headache(最优配对问题,DP,状态压缩)

UVA 10817 Headmaster’s Headache(最优配对问题,DP,状态压缩) 题目大意:有m个在校老师,n个求职者,s个课程,给出每个人的工资和授课集合,在校老师必须聘请,每个课程匹配至少两名老师,求最少工资开销。 咋一看,我的思路是用d(i,S)表示考虑前i个课程和集合S中的教师和求职者完成配对的最少工资开销,然后发现不行,状态转移表示不出来,而且集合无法用二进制表示。 参考了紫书上的分析,我发现我还是太年轻了。紫书上用d(i,s1,s2),表示考虑了前i个人,集合s1表示当前状态有且仅

WedsonLin的博客 346

UVA 1412 Fund Management (复杂状态的DP,状态池)

UVA 1412 Fund Management (复杂状态的DP,状态池) 受到前面题目的影响,一开始的思路是用d(i,s)表示经过第i天后,选择了集合s里面的股票的当前最大现金。但是发股票可以选多手,根本无法用集合表示。 由于每只股票的可持有的手数为(0<=ki<=8),最多有8只股票,所以表示当前手持股票资产的理论状态数最多有98<5*107种,但是由于还有一个持有总手数k的最大限制,实际状态数将远远低于这个值。实际状态数<1.5e4(我也不知道为什么) 所以用d(i,p)表示

WedsonLin的博客 335
上一篇: UVA 10817 Headmaster‘s Headache(最优配对问题,DP,状态压缩)
下一篇: UVA 1412 Fund Management (复杂状态的DP,状态池)
WedsonLin
博客等级 码龄7年 1粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值