P4958 [COCI2017-2018#6] Mate 题解
分析
考虑 DP。
先考虑
再考虑
优化对
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define re register
#define il inline
#define PII pair<int,int>
#define x first
#define y second
il int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-1; ch=getchar();}
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x*f;
}
const int N=2005,M=30,p=1e9+7;
char s[N];int len;
int f[N][N],g[N][N];
int sum[M][M][N];
int c[N][N];
int q;
char t[N];
il int C(int x,int y){
if(!y||x==y) return 1;
if(~c[x][y]) return c[x][y];
return c[x][y]=(C(x-1,y)+C(x-1,y-1))%p;
}
il void solve(){
memset(c,-1,sizeof(c));
scanf("%s",s+1),len=strlen(s+1);
for(re int lon=1;lon<=len;++lon)
for(re int i=lon;i<=len;++i)
f[i][lon]=C(i-1,lon-1);
for(re int i=1;i<=len;++i){
for(re int n=1;n<=i;++n)
for(re int j=0;j<26;++j) sum[s[i]-'a'][j][n]=(sum[s[i]-'a'][j][n]+g[j][n-1])%p;
for(re int n=1;n<=i;++n) g[s[i]-'a'][n]=(g[s[i]-'a'][n]+f[i][n])%p;
}
q=read();
while(q--){
int n=read();
scanf("%s",t+1);
printf("%lld\n",sum[t[2]-'a'][t[1]-'a'][n]);
}
return ;
}
signed main(){
solve();
return 0;
}
优化一下长这样:
#include<bits/stdc++.h>
using namespace std;
#define re register
#define il inline
il int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-1; ch=getchar();}
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x*f;
}
const int N=2001,M=27,p=1e9+7;
char s[N],t[2];
long long g[N][N],f[M][M][N];
long long c[N][N];
int q,len,n;
signed main(){
scanf("%s",s+1),len=strlen(s+1);
for(re int i=0;i<=len;++i)
for(re int j=0;j<=i;++j)
if(!j) c[i][j]=1;
else c[i][j]=(c[i-1][j]+c[i-1][j-1])%p;
for(re int i=1;i<=len;++i)
for(re int n=i;n>=1;--n){
for(re int j=0;j<26;++j) f[s[i]-'a'][j][n]=(f[s[i]-'a'][j][n]+g[j][n-1])%p;
g[s[i]-'a'][n]=(g[s[i]-'a'][n]+c[i-1][n-1])%p;
}
q=read();
while(q--) n=read(),scanf("%s",t),printf("%lld\n",f[t[1]-'a'][t[0]-'a'][n]);
return 0;
}
注:其实
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!