【gcj 2008 1c】长数字串运算计数,递增子序列计数

12 篇文章 0 订阅
11 篇文章 0 订阅
博客探讨了两道题目:一是关于长度不超过40的数字串,通过加减号操作使结果能被2, 3, 5, 7之一整除,采用两次动态规划(DP)解决;二是寻找数列中严格单增子序列的数量,小数据用DP,大数据利用线段树或树状数组结合数组元素离散化进行区间查询。" 132784762,18784123,遗传算法优化的BP神经网络故障诊断,"['神经网络', '算法', 'matlab', 'Matlab仿真', '故障诊断']
摘要由CSDN通过智能技术生成

第二题  长数字串运算计数

长度为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:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值