[boj](s 1)11051二項係数2
✅ DP ✅ Top Down
質問する
同じ演算を再帰的および繰返し実行しないように注記モードを使用する->DPを用いたTop Downメソッド
NとKが同時に、この係数が1、Kが0の場合、この係数は1である.
私たちはすべての状況を見つけます.
O(N)O(N)O(N)
DP問題で重要なのは,点火式の導出である.
オプションはBootm Up(繰り返し文)で展開するか、Top Down(再帰)で展開するか
質問する
リンク
に答える
1.問題のアクセスと解決ロジック(解法)
この係数の性質に基づいて、次の式を満たします.
(N,K)=(N−1,K−1)+(N−1,K)(N,K)=(N-1,K-1)+(N-1,K)(N,K)=(N−1,K−1)+(N−1,K)
1.問題のアクセスと解決ロジック(解法)
この係数の性質に基づいて、次の式を満たします.
(N,K)=(N−1,K−1)+(N−1,K)(N,K)=(N-1,K-1)+(N-1,K)(N,K)=(N−1,K−1)+(N−1,K)
同じ演算を再帰的および繰返し実行しないように注記モードを使用する->DPを用いたTop Downメソッド
NとKが同時に、この係数が1、Kが0の場合、この係数は1である.
2.コード
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int memo[1001][1001]; // memo[N][K]
int N, K;
int dp(int N, int K)
{
if (memo[N][K] != 0) // 이미 구한 값이면 저장해놓은 값 꺼내서 리턴 (메모이제이션)
return memo[N][K];
if (N == K || K == 0) memo[N][K] = 1;
else memo[N][K] = (dp(N-1,K-1) + dp(N-1,K)) % 10007;
return memo[N][K];
}
int main()
{
cin >> N >> K;
dp(N, K);
cout << memo[N][K] << "\n";
return 0;
}
3.時間複雑度分析
私たちはすべての状況を見つけます.
O(N)O(N)O(N)
4.問題の重要な部分
DP問題で重要なのは,点火式の導出である.
オプションはBootm Up(繰り返し文)で展開するか、Top Down(再帰)で展開するか
Reference
この問題について([boj](s 1)11051二項係数2), 我々は、より多くの情報をここで見つけました https://velog.io/@peanut_/boj-s1-이항-계수2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol