제출 #101952

#제출 시각아이디문제언어결과실행 시간메모리
101952Rudy420Tents (JOI18_tents)C++17
100 / 100
238 ms71132 KiB
#include <bits/stdc++.h> using namespace std; #define x first #define y second #define ll long long #define pi pair<int,int> #define pl pair<ll,ll> #define pd pair<double,double> #define ld long double #define pld pair<ld,ld> #define lg length() #define sz size() #define vi vector<int> #define vl vector<ll> #define vp vector<pi> #define vpl vector<pl> #define pb push_back #define INF 1000000005 #define LINF 1000000000000000005 int n,m; ll mod=1e9+7,dp[3005][3005]; int32_t main(){ /*seed_seq seq{ (uint64_t) chrono::duration_cast<chrono::nanoseconds>(chrono::high_resolution_clock::now().time_since_epoch()).count(), (uint64_t) __builtin_ia32_rdtsc(), (uint64_t) (uintptr_t) make_unique<char>().get() }; mt19937 rng(seq);*/ ios_base :: sync_with_stdio(0); cin.tie(); cout.tie(); #ifdef LOCAL_DEFINE ifstream cin("input.in"); #endif cin >> n >> m; for(int j=0;j<=m;j++) dp[0][j]=1; for(int j=0;j<=n;j++) dp[j][0]=1; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(i>1 && j>1) dp[i][j]=dp[i][j-1]+dp[i-1][j-1]*i*4+dp[i-2][j-1]*i*(i-1)/2+dp[i-1][j-2]*i*(j-1); else if(i>1) dp[i][j]=dp[i][j-1]+dp[i-1][j-1]*i*4+dp[i-2][j-1]*i*(i-1)/2; else if(j>1) dp[i][j]=dp[i][j-1]+dp[i-1][j-1]*i*4+dp[i-1][j-2]*i*(j-1); else dp[i][j]=dp[i][j-1]+dp[i-1][j-1]*i*4; dp[i][j]%=mod; } } cout << (dp[n][m]-1+mod)%mod; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...