AT题解——AT4541 Permutation
题目传送门
属于比较典型的排列 dp,看到数据范围可以
发现如果将第二维设置成具体的数,不能保证这是一个排列,发现我们只关心相对大小关系,可以设置为排名。
即令
对于 <
的情况,第
同理,对于 >
的情况,第
这样复杂度是
代码
int n;
char s[3005];
int dp[3005][3005];
int sum[3005];
int main(){
n=read();
scanf("%s",s+2);
dp[1][1]=1;
for(int i=1;i<=n;++i) sum[i]=1;
for(int i=2;i<=n;++i){
for(int j=1;j<=i;++j){
if(j==1&&s[i]=='<') continue;
if(j==i&&s[i]=='>') continue;
if(s[i]=='<'){
dp[i][j]=(dp[i][j]+sum[j-1])%mod;
}
else{
dp[i][j]=(dp[i][j]+sum[i-1]-sum[j-1]+mod)%mod;
}
}
for(int j=1;j<=n;++j) sum[j]=(sum[j-1]+dp[i][j])%mod;
}
printf("%d\n",sum[n]);
return 0;
}