首页 > 其他 > 详细

hdu6078[优化递推过程] 2017多校4

时间:2017-08-05 17:37:53      阅读:214      评论:0      收藏:0      [点我收藏+]
/*hdu6078[优化递推过程] 2017多校4*/
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MOD = 998244353LL;
int T, m, n, a[2005], b[2005];
LL sum[2005][3], dp[2005][3];
void solve() {
    LL ans = 0;
    for (int i = 1; i <= n; i++) {
        LL up = 1, down = 0;
        for (int j = 1; j <= m; j++) {
            dp[j][0] = dp[j][1] = 0;
            if (b[j] == a[i]) {
                dp[j][0] = up;
                dp[j][1] = down;
                ans = (ans + up + down) % MOD;
            }
            else if (b[j] > a[i]) {
                up = (up + sum[j][1]) % MOD;
            }
            else down = (down + sum[j][0]) % MOD;
            cout<<"j: "<<j<<" up: "<<up<<" down: "<<down<<endl;
        }
        /*for (int j = 1; j <= m; j++) {
            printf("dp[%d][%d][%d]=%lld, dp[%d][%d][%d]=%lld\n", i, j, 0, dp[j][0], i, j, 1, dp[j][1]);
        }*/
        for (int j = 1; j <= m; j++) {
            sum[j][0] = (sum[j][0] + dp[j][0]) % MOD;
            sum[j][1] = (sum[j][1] + dp[j][1]) % MOD;
            //printf("sum[%d][0]=%lld, sum[%d][1]=%lld\n", j, sum[j][0], j, sum[j][1]);
        }
    }
    printf("%lld\n", ans);
}
int main() {
    scanf("%d", &T);
    while (T--) {
        memset(sum, 0, sizeof(sum));
        memset(dp, 0, sizeof(dp));
        scanf("%d%d", &n, &m);
        for (int i = 1; i <= n; i++) {
            scanf("%d", &a[i]);
        }
        for (int i = 1; i <= m; i++) {
            scanf("%d", &b[i]);
        }
        solve();
    }
    return 0;
}

 

hdu6078[优化递推过程] 2017多校4

原文:http://www.cnblogs.com/UnderSilenceee/p/7290738.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!