| 记录编号 | 595057 | 评测结果 | AAAAAAAAAA | 
    
        | 题目名称 | 3162.金字塔 | 最终得分 | 100 | 
    
        | 用户昵称 |  袁书杰 | 是否通过 | 通过 | 
    
        | 代码语言 | C++ | 运行时间 | 0.261 s | 
    
        | 提交时间 | 2024-10-07 18:04:52 | 内存使用 | 11.04 MiB | 
    
    
    
    		显示代码纯文本
		
		#include<bits/stdc++.h>
#define int long long
const int mod=1e9;
using namespace std;
int dp[1005][1005];
string s;
int dfs(int l,int r){
	if(l>r){
		return 0;
	}
	if(s[l]!=s[r]){
		return 0;
	}
	if(dp[l][r]!=-5e18){
		return dp[l][r]%mod;
	}
	if(l==r){
		return 1;
	}
	for(int i=l+2;i<=r;i++){
		if(i==l+2){
			dp[l][r]=0;
		}
		dp[l][r]+=(dfs(l+1,i-1)%mod*dfs(i,r)%mod)%mod;
		dp[l][r]%=mod;
	}
	return dp[l][r]%mod;
}
signed main() {
	freopen("ZYH.in","r",stdin);
	freopen("ZYH.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	for(int i=0;i<=1000;i++){
		for(int j=0;j<=1000;j++){
			dp[i][j]=-5e18;
		}
	} 
	cin>>s;
	cout<<dfs(0,s.size()-1);
	return 0;
}