记录编号 566768 评测结果 AAAAAWAAAA
题目名称 金字塔 最终得分 90
用户昵称 Gravatar遥时_彼方 是否通过 未通过
代码语言 C++ 运行时间 0.287 s
提交时间 2021-11-16 18:35:44 内存使用 1.36 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define ull unsigned long long 
#define ll long long 
using namespace std;
string n;
const ll mod=1e9;
ll f[305][305];
int p[305][305];
ll DP(int l,int r,char st)
{
	if(l>r) return 0;
	if(p[l][r]) 
	{
//		cout<<l+1<<" "<<r+1<<":"<<f[l][r]<<endl;
		return f[l][r];
	}
	if(l==r)
	{
		f[l][r]=1;
		p[l][r]=1;
//		cout<<l+1<<" "<<r+1<<":"<<f[l][r]<<endl;
		return 1;
	}
	ll s1,s2;
	for(int i=l+1;i<r;i++)
	{
		s1=0;
		s2=0;
//		if(n[l]==n[i]) s1+=DP(l+1,i-1,n[l]);
//		if(n[i+1]==n[r]) s2+=DP(i+2,r-1,n[r]);
		if(n[i]==st)
		{
			if(i-l>=2&&n[l]==n[i-1]) s1+=DP(l+1,i-2,n[l]);
			else s1=1;
			s2+=DP(i+1,r,st);
			s1%=mod;
			s2%=mod;
		}
		f[l][r]+=s1*s2;
		f[l][r]%=mod;
	}
	if(n[l]==n[r])
	{
		f[l][r]+=DP(l+1,r-1,n[l]);
		f[l][r]%=mod;
	}
//	cout<<l+1<<" "<<r+1<<":"<<f[l][r]<<endl;
    p[l][r]=1;
	return f[l][r];
}
int main()
{
	freopen("ZYH.in","r",stdin);
	freopen("ZYH.out","w",stdout);
    cin>>n;
    if(n.length()==2) 
    {
    	cout<<0<<endl;
		return 0; 
	} 
    cout<<DP(1,n.length()-2,n[0])<<endl;
//    for(int i=0;i<n.length();i++)
//    {
//    	for(int o=i;o<n.length();o++)
//    	{
//    		cout<<i+1<<":"<<o+1<<":"<<f[i][o]<<endl;
//    	}
//    }
	return 0;
}
//1 2 3 4 5 6 7