题意:给定一个先序遍历序列,问符合条件的树的种类数

解题关键:枚举分割点进行dp,若符合条件一定为回文序列,可分治做,采用记忆化搜索的方法。

转移方程:$dp[i][j] = \sum {dp[i + 1][k - 1]*dp[k][j]} $ 令$dp[i][j]$表示i到j里数量

1、记忆化搜索

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9;
ll dp[][];
char a[]; ll dfs(int l,int r){
if(dp[l][r]!=-)return dp[l][r];
if(l==r) return dp[l][r]=;
if(a[l]!=a[r]) return ;
dp[l][r]=;
for(int i=l+;i<=r;i+=){
if(a[i]==a[l]){
dp[l][r]+=dfs(l+,i-)*dfs(i,r);//一定注意dp的顺序
dp[l][r]%=mod;
}
}
return dp[l][r];
} int main(){
freopen("exploring.in", "r", stdin);
freopen("exploring.out", "w", stdout);
while(~scanf("%s", a)){
memset(dp,-,sizeof dp);
int len=strlen(a);
printf("%lld\n", dfs(,len-)%mod);
}
return ;
}

2、区间dp

#include<bits/stdc++.h>
#define mod 1000000000
using namespace std;
typedef long long ll;
string a;
ll dp[][],len;
int main(){
freopen("exploring.in", "r", stdin);
freopen("exploring.out", "w", stdout);
while(cin>>a){
memset(dp,,sizeof dp);
len=a.size();
if(len%==){
cout<<<<endl;
continue;
}
for(int i=;i<len;i++) dp[i][i]=;
for(int i=;i<len;i+=){
for(int l=,r;l+i<len;l++){
r=l+i;
if(a[l]==a[r]){
for(int k=l+;k<=r;k++)
if(a[k]==a[l])
dp[l][r]=(dp[l][r]+dp[l+][k-]*dp[k][r])%mod;
}
}
}
cout<<dp[][len-]<<endl;
}
return ;
}

最新文章

  1. [LeetCode] Ransom Note 赎金条
  2. DataGrid排序
  3. 08day2
  4. setuid函数解析
  5. An internal error occurred during: &quot;Launching New_configuration&quot;
  6. Entity Framework Core 软删除与查询过滤器
  7. 用DataRelation给多个DataTable建立关系并显示到TreeView
  8. SSM-Spring-04:Spring的DI的构造注入,P命名注入,和集合注入
  9. 该用Python还是SQL?4个案例教你节省时间
  10. PMP备考资料和备考经验分享(基于PMP第六版)
  11. 数据结构—头插法逆转单链表——空间复杂度为O(1)
  12. UML顺序图知识点介绍(Sequence Diagram)
  13. 我们如何用Go来处理每分钟100万复杂请求的场景
  14. 关于jQuery.ajax()的jsonp碰上post详解
  15. 《Gradle权威指南》--Android Gradle NDK支持
  16. Could not open JDBC Connection for transaction
  17. 如何用Client OM获取页面上一个Content web part的内容
  18. 默认的Sublime 3中没有Package Control
  19. 如何修改jenkins的启动用户?
  20. shell-网上lnmp一键安装讲解

热门文章

  1. Vim 替换命令
  2. hihocoder 1142 三分求极值【三分算法 模板应用】
  3. 算法(Algorithms)第4版 练习 1.4.1
  4. Java -- 封装访问控制级别,包, instanceof 运算符, 初始化块
  5. node路由访问,中间件返回数据
  6. CSS: iPhone Custom CSS
  7. Memcached 分布式缓存实现原理简介
  8. windows下安装配置nginx
  9. g++能过,c++过不了
  10. Abp模块分析