欢迎光临散文网 会员登陆 & 注册

第十三届安徽省大学生程序设计大赛_I玩捉迷藏

2022-06-26 12:26 作者:Clayton_Zhou  | 我要投稿

题目描述

小明和朋友们在航空博物馆玩捉迷藏,现在有N间房间连成一排,编号为1,2,…,N,其中某些房间里面有1个人(且不会超过1个),其它房间没有人。小明可以使用Cij个航天纪念币让博物馆管理员告诉他i,i+1,…,j这些房子里人员总数的奇偶性。采取最优的询问策略,小明至少需要使用多少纪念币,才能准确找到哪些房子里有人(能够处理人员任意分布的情形)?


输入说明

第一行是一个整数N(1≤N≤2000)。 接下来N行,第i行有(N-i+1)个数,代表Cij≤10^9,1≤i≤j≤N。

输出说明

输出一个整数,表示最少使用的纪念币个数。

输入样例 

5

1 2 3 4 5

4 3 2 1

3 4 5

2 1

5

输出样例

7


确定每个房间是否有人等价于确定所有的前缀的奇偶性。

如果知道   ( i-1 , i ],    的奇偶性,  即知道前缀i-1和前缀i 的关系:

1. 奇偶相同,i 没有人。

2. 奇偶不同,i有人。

 

我们需要知道  ( 0 , 1 ], ( 1 , 2 ],  ( 2 , 3 ], ......  ( N-1 , N ] 的奇偶性,实际上是要连通

0,1,2,3,......, N-1, N  这N+1个点。

 

对于区间 [ L , r ] 实际上就是连通了前缀L− 1 和前缀r。

所以我们的目的是: 选择N个最小费用的区间[ L , r ],连通

0,1,2,3,......, N-1, N  这N+1个点。即求一个最小生成树,用kruskal算法



第十三届安徽省大学生程序设计大赛_I玩捉迷藏的评论 (共 条)

分享到微博请遵守国家法律