Submission #168881

#TimeUsernameProblemLanguageResultExecution timeMemory
168881triplem5dsTents (JOI18_tents)C++14
100 / 100
272 ms36076 KiB
#pragma GCC optimize ("O3") #pragma GCC optimize ("unroll-loops") #include "bits/stdc++.h" using namespace std; #define pb push_back #define F first #define S second #define f(i,a,b) for(int i = a; i < b; i++) //#define endl '\n' using ll = long long; using db = long double; using row = vector<int>; using ii = pair<int, int>; const int N = 1e5 + 5, M = 1e6 + 5, A = 6561, LG = 18, MOD = 1e9 + 7; const int BLOCK = 1900; const int BLOCKN = N / BLOCK + 1; const long double EPS = 1e-7; int dp[3005][3005]; int n, m; int solve(int col, int emptyRows){ if(col == 0)return 1; int &ret = dp[col][emptyRows]; if(~ret) return ret; ///put nothing ret = solve(col-1,emptyRows); ///put two S and N have to be emptyRows if(emptyRows>=2) ret = (ret + solve(col-1,emptyRows-2) * 1ll * emptyRows * (emptyRows-1)/2) % MOD; ///put an S or an N or a W if(emptyRows) ret = (ret + solve(col-1,emptyRows-1) * 3ll * emptyRows)%MOD; ///put an E with no follow up if(emptyRows) ret = (ret + solve(col-1,emptyRows-1)*1ll*emptyRows)%MOD; ///put a E and W combo if(emptyRows&&col>=2) ret = (ret + solve(col-2,emptyRows-1)*1ll*emptyRows*(col-1))%MOD; return ret; } int main(){ #ifdef ONLINE_JUDGE ios_base::sync_with_stdio(0); cin.tie(0); #endif // ONLINE_JUDGE cin>>n>>m; memset(dp,-1,sizeof dp); cout<<solve(m,n)-1<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...