第二题 长数字串运算计数
长度为D的数字串(D<=40)在其中加上加号、减号或者不加符号(不加符号则相邻数字连接为一个数,让结果至少能被2 3 5 7之一整除,问有多少种方法。
两次DP
第一次用于区间[l, r] 对应的大整数对小整数 求余(见数字分类下的某篇文章)。 第二次是区间分解dp。
code: https://github.com/stevenberge/acm/blob/master/gcj/20081c2.cc
第三题 递增子序列计数
给定一个数列,求严格的单增子序列的个数。给定数列长度有50w...
小数据: dp
cnt[i] = E(cnt[j<i], a[j]<a[i]), 时间复杂度O(n^2)
大数据:线段树/树状数组做区间查询Sum+数组元素离散化
for i=0 to n-1:
tree[b[i]] +=sum{ tree[b[j]], b[0]<=b[j]<b[i] } //查询[0,i-1] 区间的sum
时间复杂度O(nlgn)
code: