摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4638大意:询问区间内有多少段连续的数,如3 1 2 5 4,区间[2,4]内有2段数,1~2和5解法:考察当前插入一个数x会发生什么变化:如果x+1和x-1都已出现,那么x的插入会使得他们3个数连成一段,段的个数减少1;如果两者均没有出现,那么段的个数增加1;如果只出现其一,则段的个数不发生变化;那么,我们可以先将所有的数,按照这样的规律所取得的值插入到一颗线段树中,整个区间段的个数即为区间和;但是,询问不一定是整个区间,所以还需要删除前面的一些数,进一步,我们将所有询问读入后,按照左端点排序,对于每 阅读全文
posted @ 2013-08-02 18:07 sxqqslf 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4632大意:求出一个串的不同的回文子序列的个数思路:首先是回文子序列,不是子串;考虑动态规划,状态表示:f[s][e]表示区间[s,e]内有所少个回文子序列,那么转移就是: f[s][e] = f[s+1][e] + f[s][e-1] - f[s+1][e-1],因为[s+1,e]和[s,e-1]会有重复的部分(容斥原理); 另外,如果ch[s] = ch[e],那么可以首位两个字符可以和内部的串组成新的回文串,加上其本身("ch[s]ch[e]"也是回文串),故还需要加上 f[s 阅读全文
posted @ 2013-08-02 13:52 sxqqslf 阅读(127) 评论(0) 推荐(0) 编辑