QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#881119 | #4436. Link with Bracket Sequence II | wang1jia1le4 | AC ✓ | 1342ms | 7448kb | C++23 | 925b | 2025-02-04 11:57:21 | 2025-02-04 11:57:21 |
Judging History
answer
#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
int t;
int n,m;
int a[501];
long long dp[501][501][2];
int main(){
cin>>t;
while(t--){
cin>>n>>m;
memset(dp,0,sizeof dp);
for(int i=1;i<=n;i++){
cin>>a[i];
dp[i][i-1][0]=1;
dp[i][i-1][1]=dp[i][i][0]=dp[i][i][1]=0;
}
for(int l=2;l<=n;l++){
for(int i=1;i+l-1<=n;i++){
int j=i+l-1;
if(a[i]==0&&a[j]==0){
dp[i][j][0]=(m*((dp[i+1][j-1][0]+dp[i+1][j-1][1])%mod))%mod;
}
else if((a[i]+a[j]==0&&a[i]>0&&a[j]<0)||(a[i]==0&&a[j]<0)||(a[j]==0&&a[i]>0)){
dp[i][j][0]=(dp[i+1][j-1][0]+dp[i+1][j-1][1])%mod;
}
for(int k=i;k<j;k++){
dp[i][j][1]+=(dp[i][k][0]*((dp[k+1][j][0]+dp[k+1][j][1])%mod))%mod;
dp[i][j][1]%=mod;
}
//cout<<i<<" "<<j<<" "<<dp[i][j][0]<<" "<<dp[i][j][1]<<endl;
}
}
cout<<(dp[1][n][0]+dp[1][n][1])%mod<<endl;
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1342ms
memory: 7448kb
input:
20 10 1 1 -1 0 -1 -1 1 -1 1 0 0 10 2 0 1 1 -2 1 -2 -1 1 -2 1 8 5 0 0 4 0 0 2 -2 0 9 5 0 0 0 -3 0 0 0 0 0 8 5 0 1 0 0 0 0 0 0 498 249013689 239722195 0 0 0 -59682797 187213467 0 0 220688278 0 0 -133178217 165866643 -165866643 216987003 55229518 -55229518 -216987003 0 82546192 0 0 0 0 -62330427 -19687...
output:
0 0 75 0 1125 469841384 200768531 102789125 188155310 573855452 1 10742885 839674900 273705999 280134765 397511344 679455456 227852148 343052576 776801212
result:
ok 20 lines