summaryrefslogtreecommitdiff
path: root/acwing/1212.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-03-02 22:20:12 +0800
committercrupest <crupest@outlook.com>2021-03-02 22:20:12 +0800
commitbecf15e1b2a154daa837a42605e143c037fc3133 (patch)
tree20d2d0a5a66dd280b49e676a3464c3ed04a58a00 /acwing/1212.cpp
parent81617350aae27e287c6d9e044bc3e94ae4f6d048 (diff)
downloadsolutions-becf15e1b2a154daa837a42605e143c037fc3133.tar.gz
solutions-becf15e1b2a154daa837a42605e143c037fc3133.tar.bz2
solutions-becf15e1b2a154daa837a42605e143c037fc3133.zip
Add acwing 1212.
Diffstat (limited to 'acwing/1212.cpp')
-rw-r--r--acwing/1212.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/acwing/1212.cpp b/acwing/1212.cpp
new file mode 100644
index 0000000..e60e993
--- /dev/null
+++ b/acwing/1212.cpp
@@ -0,0 +1,46 @@
+#include <iostream>
+
+int n, m, k;
+int v[51][51];
+int f[51][51][14][14]; // row col count max
+const int MOD = 1000000007;
+
+int main() {
+ std::ios_base::sync_with_stdio(false);
+ std::cin >> n >> m >> k;
+
+ for (int i = 1; i <= n; i++)
+ for (int j = 1; j <= m; j++) {
+ std::cin >> v[i][j];
+ v[i][j]++;
+ }
+
+ f[1][1][0][0] = 1;
+ f[1][1][1][v[1][1]] = 1;
+
+ for (int i = 1; i <= n; i++) {
+ for (int j = 1; j <= m; j++) {
+ for (int c = 0; c <= k; c++) {
+ for (int m = 0; m <= 13; m++) {
+ f[i][j][c][m] = (f[i][j][c][m] + f[i][j - 1][c][m]) % MOD;
+ f[i][j][c][m] = (f[i][j][c][m] + f[i - 1][j][c][m]) % MOD;
+
+ if (c && v[i][j] == m) {
+ for (int max = 0; max < v[i][j]; max++) {
+ f[i][j][c][m] = (f[i][j][c][m] + f[i][j - 1][c - 1][max]) % MOD;
+ f[i][j][c][m] = (f[i][j][c][m] + f[i - 1][j][c - 1][max]) % MOD;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ int result = 0;
+ for (int i = 1; i <= 13; i++)
+ result = (result + f[n][m][k][i]) % MOD;
+
+ std::cout << result;
+
+ return 0;
+}