蜜汁位运算与剪枝。。。
|
|
题目 2858 计算2的幂
2018-11-02 17:44:03
|
|
真jb水的题。。@8865 出题人出来挨打
|
|
水题
|
|
搬一下官方题解
题目大意 给定 N 个数字, N 个字母。要求确定数字与字母的对应关系,使给定 M 个数字串和字符串组尽可能多的满足对应关系。 考察算法 搜索 位运算/状态压缩 算法一 枚举每个数字对应的字符,时间复杂度 O(N!)。然后通过 O(ML)的时间判断每个字符串数组是否匹配。不断更新最大值。伪代码: DFS(dep) If dep == N Then Num ← Count() If Num > Max Max ← Num End If End If For i = 1 .. N If not used[i] Then used[i] ← true a[dep] ← i DFS(dep + 1) used[i] ← false End If End For 其中 dep 表示枚举到的第几个字符, a[i]表示第 i 个字符对应的数字。 时间复杂度: O(N!•ML) 期望得分: 30 算法二 在算法一的基础上加上简单的剪枝,如果当前数量已经小于已知最大值,就把当前纸 条剪掉。 DFS(dep) Num ← Count() If Num <= Max Then Exit If dep == N Then If Num > Max Max ← Num End If End If For i = 1 .. N If not used[i] Then used[i] ← true a[dep] ← i DFS(dep + 1) used[i] ← false a[dep] ← 0 End If End For 时间复杂度: O(N!•ML) 期望得分: 60 算法三 此算法需要用到一点位运算的知识,阅读前请保证你已经熟练地使用位运算,否则请到 Matrix67 的 Blog 查看相关知识后再进行阅读。 通过题目数据我们可以知道 M 最大不会超过 60,而一个 long long的范围最大到 2^63-1,所以我们可以通过一个 2 进制数来表示当前字符数列组的匹配情况。 1 表示可能匹配, 0 表示不能匹配。同样需要通过全排列来枚举每个字符对应的数字,采用 DFS(dep, rest), rest 表示当前的匹配情况状态。每次枚举一个字符所对应的数字,我们可以通过 O(1)的时间从当前状态中减去不能匹配的状态。建立数组del[i][j]表示当字母 i 对应数字 j 时,会造成那些不能匹配,比如 del[i][j]=(1001)2,表示当字母 i 对应字母 j 时,第 1、 4 字符数列组不能匹配。那么新的状态就等于 new = rest & (~del[i][j])或 new :=rest and (not del[i][j])。 然后再加上算法二的剪枝,就能够通过所有的数据。 接下来考虑如何求出 del[i][j],依次枚举每一个字符数列组,设第 i 个字符数列组对应的 2 进制位置为 t[i]。如果在该字符数组中字母 ch 对应了数字 num,那么其他数字的 del[i][num]和 ch 对应的其他数字 del[ch][j]都应该加上 t[i]。预处理的时间复杂度为 O(MLN^2)。 最后只需要在主函数内调用 DFS(0, (1<<M)-1)即可。 时间复杂度: O(MLN+N!)/O(ML+MN^2+N!) 期望得分: 80 算法四 在算法三的基础上优化搜索顺序,记录每个字母出现的次数,按照最小到大的顺序进行搜索。由于先出现字母影响较小,可以使最后产生的结果尽可能大,很多冗余都会被剪掉。 时间复杂度: O(MLN+N!)/O(ML+MN^2+N!) 期望得分: 100 |
|
题目 2858 计算2的幂
2018-11-01 23:40:22
|
|
|
|
|
|
数据有问题,最后一个点中最长上升子序列为 0 1 2 3 4 5 6 7 8 9 10 56 96 101
0不是正整数; 这样会导致程序输出13(正解为14); 正在请求老师修复 |
|
明明是道打表规律题
|
|
打表大法好,搜索直接过!!!
题目 913 漫游小镇
2018-11-01 07:06:41
|
|
水水水水水水水水水水二十分钟写出来结果交错代码
题目 3034 [USACO Feb18 Silver]Snow Boots
2018-10-31 22:29:10
|
|
题目 1114 [郑州培训2012] 暴力摩托
2018-10-31 21:33:12
|
|
一个年老蒟蒻oier的心愿~前来填三年前坑
还愿 贪心一遍即可 |
|
积分过一千,come on
题目 698 奶牛们的货币系统
2018-10-31 20:25:33
|
|
我满分已经无敌了
600行代码
题目 2493 [HZOI 2015] 魔兽世界-终极版
2018-10-31 20:08:36
|
|
从网上学来的图上dp加dfs,感觉很强的(主要是不会楼上大佬的强联通分块)
|
|
呵呵呵,文件名把 . 一不小心写成了,
题目 3031 [CH 2906]骑士风度的牛
2018-10-31 19:00:18
|
|
甚至不用筛。。。就O(n^(3/2))乱搞就过了。。。
|
|
总算过了,还是太弱了,qwq
|