zoukankan      html  css  js  c++  java
  • 洛谷P1373 小a和uim之大逃离

    一眼看过去就是 f[a的位置][b的位置][a的容量][b的容量][谁走] 嘛.

    结果一算,时间空间复杂度都过不去..我好菜啊

    题目只要求计算差值, 所以记录a - b差值即可.

    注意这样定义的话差值可能为负数, 所以要找等价关系.

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int MOD = 1000000007;
    const int MAXN = 8e2 + 5;
    const int MAXK = 15 + 1;
    
    int f[MAXN][MAXN][MAXK][2];
    int a[MAXN][MAXN];
    int N, M, K;
    
    int main()
    {
        cin>>N>>M>>K; ++K;
        for(int i = 1; i <= N; i++)
            for(int j = 1; j <= M; j++){
                scanf("%d", &a[i][j]);
                a[i][j] %= K;
                f[i][j][a[i][j]][0] = 1;
            }
        
        int ans = 0;
        for(int i = 1; i <= N; i++)
            for(int j = 1; j <= M; j++)
                for(int k = 0; k < K; k++){
                    (f[i + 1][j][(k + a[i + 1][j]) % K][0] += f[i][j][k][1]) %= MOD;
                    (f[i][j + 1][(k + a[i][j + 1]) % K][0] += f[i][j][k][1]) %= MOD;
                    (f[i + 1][j][(k - a[i + 1][j] + K) % K][1] += f[i][j][k][0]) %= MOD;
                    (f[i][j + 1][(k - a[i][j + 1] + K) % K][1] += f[i][j][k][0]) %= MOD;
                    (ans += f[i][j][k][1] * (k == 0)) %= MOD;
                }
                
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    [SHOI2014]信号增幅仪
    [SDOI2016]征途
    Luogu P3226 [HNOI2012]集合选数
    Comet OJ C1076 [Contest #4]求和
    Luogu P2657 [SCOI2009]windy数
    Luogu P1864 [NOI2009]二叉查找树
    UVA10559 Blocks
    Luogu P1880 [NOI1995]石子合并
    简单DP
    CF1097F Alex and a TV Show
  • 原文地址:https://www.cnblogs.com/wsmrxc/p/9292967.html
Copyright © 2011-2022 走看看