[Offer收割]编程练习赛25 register

Ended

Participants:399

Verdict:Accepted
Score:100 / 100
Submitted:2017-09-03 13:53:59

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <bits/stdc++.h>
using namespace std;
const int MOD = (int)1e9 + 7;
const int N = 301;
const int K = 11;
int dp[N][N][N];
int getAns(int n, int m, int k) {
  if (n < 0 || m < 0 || k < 0) {
    return 0;
  }
  if (n < k) {
    return 0;
  }
  if (n == k) {
    return 1;
  }
  if (dp[n][m][k] != -1) {
    return dp[n][m][k];
  }
  int res = (getAns(n, m - 1, k + 1) + getAns(n - 1, m, k - 1)) % MOD;
  if (k == 0) {
    res = (res + getAns(n, m - 1, k)) % MOD;
  }
  dp[n][m][k] = res;
  //cerr << n << ' ' << m << ' ' << k << ' ' << res << endl;
  return res;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX