Хотел решить C со вкошпа на тесте 16 выдает тайм лимит возможно большие входные данные помогите применить мемоизацию или другую оптимизацию
#include <bits/stdc++.h>
#define vi vector<int>
#define vll vector<long long>
#define vull vector<unsigned long long>
#define pair<int,int> pii
#define vii vector<pii>
#define sz(x) (int)(x.size())
#define f first
#define s second
#define pb push_back
#define endl "\n"
#define pii pair<int, int>
#define all(x) (x).begin(), (x).end()
#define rz resize
#define FOR(i, n) for(int i = 1; i < (n); i++)
#define rep(i, a, b) for(int i = a ; i < b ; i++)
#define Sum(a) accumulate(all(a), (int)0)
#define psum(a, b) partial_sum(a.begin(), a.end(), b.begin())
#define boost ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 2e18
#define mod 1e7
using namespace std;
using ill = long long int;
using ll = int64_t;
using uint = uint32_t;
using ld = long double;
#if 0
int x = min({a,b,c,d});
ll dp(ll h, ll w) {
if(h==1 or w==1) {
return h*w;
}
return dp(h-1,w) + dp(1,w);
}
#endif
ll dp(ll h,ll w) {
if(h==1 and w==1) {
return 1;
}
if(h>w) {
return dp(h-1,w) + dp(1,w) + h*w;
}
else{
return dp(h,w-1) + dp(h,1) + h*w;
}
}
int main() {
boost;
ll h,w;
cin>>h>>w;
ll ans = dp(h,w);
cout<<ans;
}```
