炸了
查看原帖
炸了
923248
Lian_zy楼主2024/7/13 22:27

rt,dp[i][j][h]表示走到i,j的路径modk能否为h

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxn = 1e2 + 10;
int n, m, k, ans, cnt[maxn], a[maxn][maxn], dp[maxn][maxn][maxn];

int main() {
    scanf("%d %d %d", &m, &n, &k);
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            scanf("%d", &a[i][j]);
            a[i][j] %= k;
        }
    }
    for (int h = 0; h < k; h++) {
        dp[1][1][h] = (a[1][1] == h);
    }

    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            if (i == 1 && j == 1) continue;
            for (int h = 0; h < k; h++) {
                if (i > 1) dp[i][j][h] |= dp[i - 1][j][(h - a[i][j] + k) % k];
                if (j > 1) dp[i][j][h] |= dp[i][j - 1][(h - a[i][j] + k) % k];
            }
        }
    }

    for (int i = 0; i < k; i++) {
        if (dp[m][n][i]) {
            ans++;
            cnt[ans] = i;
        }
    }

    printf("%d\n", ans);
    for (int i = 1; i <= ans; i++) printf("%d ", cnt[i]);
    return 0;
}
2024/7/13 22:27
加载中...