SRM708 div1 PalindromicSubseq(动态规划+容斥原理)
2024-10-21 16:36:28
题目大意:给定一个字符串,记X[i]为包含s[i]这个字符的所有子列是回文串的个数(注意是子列而不是子串),求出所有的X[i]*(i+1),然后异或起来作为返回结果
题解:
首先用容斥来想,如果当前枚举到i
那么答案就是
1、选i作为中间的字幕,(0, i-1)和(i+1, L)这两个区间相互匹配回文
2、直接选(0, i),(i+1, L)这两个区间相互匹配回文
3、直接选(0, i-1), (i, L)这两个区间相互回文匹配
然后我们发现后两种情况会有重叠情况
我们把这两种情况更细致的分一下,(0, i), (i+1,L)如果能匹配,那么必定要找到s[j] = s[i], j是属于(i+1, L)的
然后我们这样来做
令f[l][r]表示, 只用(l, r)区间就可以构成回文串的个数
令g[l][r]表示,用(0, l), (r, L)2个区间相互回文匹配构成的个数
然后没找到一对(i, j),乘一下f[i+1][j-1], g[i-1][j+1]即可
转移:
f[l][r] = f[l+1][r] + f[l][r-1] - (s[l] == s[r] ? 0 : f[l+1][r-1])
g[l][r] = g[l-1][r] + g[l][r+1] - (s[l] == s[r] ? 0 : s[l-1][r+1])
然后就可以做了
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <typeinfo>
#include <fstream> using namespace std;
typedef long long LL;
const int maxn = ;
const int MOD = 1e9 + ;
LL F[maxn][maxn], G[maxn][maxn];
string S;
LL g(int l, int r){
if(l < || r >= S.length()) return ;
if(G[l][r]) return G[l][r];
G[l][r] = ((LL)g(l-, r) + g(l, r+) - (S[l] == S[r] ? : g(l-, r+)))%MOD;
return G[l][r];
} LL f(int l, int r){
if(l > r) return ;
if(l == r) return ;
if(F[l][r]) return F[l][r];
F[l][r] = ((LL)f(l+, r) + f(l, r-) - (S[l] == S[r] ? : f(l+, r-)))%MOD;
return F[l][r];
} class PalindromicSubseq {
public:
int solve(string s) {
memset(F, , sizeof(F));
memset(G, , sizeof(G));
S = s;
LL ans = ;
for(int i = ; i < s.length(); i++){
LL temp = ;
for(int j = ; j < s.length(); j++)
if(s[i] == s[j]){
int l = min(i, j), r = max(i, j);
(temp += (LL)f(l+, r-)*g(l-, r+)%MOD) %= MOD;
}
(temp += MOD) %= MOD;
(temp *= (LL)(i+)) %= MOD;
ans ^= temp;
}
return ans;
}
};
最新文章
- LAMP_02_WIN下Apache安装配置
- 父容器根据子容器高度自适应:设置父容器 height:100%;overflow:hidden;
- 23 其它话题 - 《Python 核心编程》
- 重写UIPageControl实现自定义按钮
- Scala中的Apply
- js:语言精髓笔记6----作用域
- HDU3501 Calculation 2(欧拉函数)
- (23)odoo中的domain表达式
- ibatis基础
- java Spring 在WEB应用中的实例化
- Qt 操作Excel
- android用户界面之ScrollView教程实例汇总
- 介绍两个Android不常用的Drawable:GradientDrawable和 StateListDrawable
- SpringMVC @SessionAttributes 使用
- 一、程序设计与C语言
- ArcGIS案例学习笔记-CAD数据自动拓扑检查
- WPF 介绍一种在MVVM模式下弹出子窗体的方式
- CSS text系列
- BZOJ3328: PYXFIB
- 常见文档一览表 -httpclient