HDU6078Wavel Sequence(计数dp)

xiaoxiao2021-02-28  96

#include <cstdio> #include <cstring> using namespace std; typedef long long LL; const int maxn=2e3+5; const int mod=998244353; int a[maxn],b[maxn]; LL cnt0,cnt1; LL dp[maxn][2]; int n,m; int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } for(int i=0;i<m;i++) { scanf("%d",&b[i]); } LL ans=0; memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) { LL cnt0=1,cnt1=0; for(int j=0;j<m;j++) { if(a[i]==b[j]) { dp[j][0]=(dp[j][0]+cnt0)%mod; dp[j][1]=(dp[j][1]+cnt1)%mod; ans=(ans+cnt0+cnt1)%mod; } else if(a[i]>b[j]) { cnt1=(cnt1+dp[j][0])%mod; } else { cnt0=(cnt0+dp[j][1])%mod; } } } printf("%I64d\n",ans); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-63880.html

最新回复(0)