1212. 地宫取宝(DP)

1212. 地宫取宝

#include <bits/stdc++.h>
using namespace std;

const int N = 55, MOD = 1000000007;

int n, m, k;
//i, j, 个数, 最大值
int dp[N][N][13][14];
int w[N][N];

signed main(){
    cin >> n >> m >> k;
    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= m; ++j){
            cin >> w[i][j]; ++w[i][j];
        }
    }
    dp[1][1][0][0] = 1;
    dp[1][1][1][w[1][1]] = 1;
    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= m; ++j){
            for(int cnt = 0; cnt <= k; ++cnt){
                for(int val = 0; val <= 13; ++val){
                    int &t = dp[i][j][cnt][val];
                    t = (t + dp[i-1][j][cnt][val]) % MOD;
                    t = (t + dp[i][j-1][cnt][val]) % MOD;
                    if(cnt > 0 && val == w[i][j]){
                        for(int v = 0; v < val; ++v){
                            t = (t + dp[i-1][j][cnt-1][v]) % MOD;
                            t = (t + dp[i][j-1][cnt-1][v]) % MOD;
                        }
                    }
                }
            }
        }
    }
    long long res = 0;
    for(int i = 1; i <= 13; ++i) res = (res + dp[n][m][k][i]) % MOD;
    
    cout << res << endl;
    
    return 0;
}
posted @ 2025-03-31 11:37  awei040519  阅读(13)  评论(0)    收藏  举报