제출 #1271831

#제출 시각아이디문제언어결과실행 시간메모리
1271831ZeroCoolTents (JOI18_tents)C++20
100 / 100
260 ms71576 KiB
#include <bits/stdc++.h>
using namespace std;;
#define ll long long
#define ar array
#define ld double
#define int long long
#define all(v) v.begin(), v.end()

//  #pragma GCC optimize("O3,Ofast,unroll-loops ")

const int N = 3010;
const int M = 20;
const int LOG = 20;
const int INF = 1e17;	
int MOD = 1e9 + 7;
const ld EPS = 1e-12;

template<typename T>
inline void chmin(T &x,T y){x = min(x, y);}
template<typename T>
inline void chmax(T &x,T y){x = max(x, y);}
inline void mm(int &x){x = (x % MOD + MOD) % MOD;};

int n, m;
int dp[N][N];

int f(int i,int j){
    if(i <= 0 || j <= 0)return 1;
    if(dp[i][j] != -1)return dp[i][j];
    int res = 0;
    mm(res += f(i - 1, j));
    mm(res += f(i - 1, j - 2) * j * (j - 1) / 2);
    mm(res += f(i - 1, j - 1) * 4 * j);
    mm(res += f(i - 2, j - 1) * (i - 1) * j);
    return dp[i][j] = res;
}

void orz(){
    cin>>n>>m;
    memset(dp, -1, sizeof dp);
    cout<<f(n, m) - 1<<'\n';   
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t = 1;
    //  cin>>t;
    while (t--)orz();
}   
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...