제출 #235691

#제출 시각아이디문제언어결과실행 시간메모리
235691Knps4422Tents (JOI18_tents)C++14
100 / 100
306 ms59048 KiB
//#pragma optimization_level 3 //#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #include<bits/stdc++.h> /* #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/detail/standard_policies.hpp> using namespace __gnu_pbds; typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>ordset; */ #define fr first #define sc second #define vec vector #define pb push_back #define pii pair<int, int> #define forn(x,y) for(int x = 1 ; x <= (int)y ; ++x) #define all(x) (x).begin(),(x).end() #define fast cin.tie(0);cout.tie(0);cin.sync_with_stdio(0);cout.sync_with_stdio(0); using namespace std; typedef long long ll; typedef unsigned int uint; typedef complex<int> point; const int nmax = 3005; const ll linf = 1e18; const ll mod = 1e9+7; const int inf = INT_MAX; ll n, m; ll f[nmax][nmax]; ll rec( ll x , ll y){ if( x < 0 || y < 0) return 0; if( x == 0 || y == 0) return 1; if(f[x][y]) return f[x][y]; f[x][y] = rec(x-1,y) + rec(x-1,y-1)*4LL*y % mod + rec(x-1,y-2)*(y *(y-1) / 2LL) % mod + rec(x-2,y-1)*y*(x-1)%mod; f[x][y] %= mod; return f[x][y]; } int main(){ // fast; cin >> n >> m; cout << (rec(n,m)+ mod - 1) % mod <<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...