1일1알

백준 14494번 다이나믹이 뭐에요? C++ 본문

알고리즘

백준 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;
}

'알고리즘' 카테고리의 다른 글

백준 2258번 정육점 C++  (0) 2023.02.07
백준 1735번 분수 합 C++  (0) 2023.02.06
백준 13901번 로봇 C++  (0) 2023.02.04
백준 16936번 나3곱2 C++  (0) 2023.02.03
백준 13703번 물벼룩의 생존확률 C++  (0) 2023.02.02