恢复LIS[NOIP模拟赛] 做题记录


题目在上面的图片里
神秘题
M很大显然不可能放在状态里
然后发现我们压根就不需要M,只需要记录我们在填数的过程中记录一下用了几个本质不同的数即可
有一个O(3^nn)的DP,我门考虑从小到大填数字
我们记录DP(i,S)表示用了i个数字,已经填了S状态里的数字,有多少情况
转移的时候枚举一个没填的集合,check合法性是容易的
可以优化到O(2^nn*n),只要每一轮从后往前填即可,但有一个小细节,可能一轮下来一个数也没填,可以记一个0/1状态表示有没有填,当然更简单的做法是二项式反演
然而简单观察都可以发现,合法的状态对于每一种数字的集合,填了的都是一个后缀,状态数是len的乘积
根据均值不等式,len相等时成绩最大,若有I个数字,则复杂度为O(I^(N/I))
当I取3时该式值最大,用unordered_map每次只走合法状态复杂度就对了

浙公网安备 33010602011771号