알고리즘
백준 14494번 다이나믹이 뭐에요? C++
영춘권의달인
2023. 2. 5. 11:54
https://www.acmicpc.net/problem/14494
14494번: 다이나믹이 뭐예요?
(1, 1)에서 (n, m)에 도달하는 경우의 수를 구하여라. 단, 경우의 수가 엄청 커질 수 있으므로 경우의 수를 1,000,000,007(=109+7)로 나눈 나머지를 출력한다.
www.acmicpc.net
dp
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <list>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <limits.h>
using namespace std;
using int64 = long long;
const int divVal = 1000000007;
int n, m;
vector<vector<int>> cache;
int dp(int row, int col) {
if (row < 0 || col < 0) return 0;
int& val = cache[row][col];
if (val != -1) return val;
if (row == 0 && col == 0) return val = 1;
val = 0;
return val = ((dp(row - 1, col) % divVal + dp(row, col - 1) % divVal) % divVal + dp(row - 1, col - 1) % divVal) % divVal;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m;
cache = vector<vector<int>>(n, vector<int>(m, -1));
int ans = dp(n - 1, m - 1);
cout << ans;
}