티스토리 뷰
반응형
Algorithm 공부 #23 - 조합
조합(Combination)
● n개의 숫자에서 r개를 뽑는 경우의 수
● 코딩 테스트에서는 순열보다는 조합이 빈도수가 높음
● 조합은 동적 계획법의 시작이라고 할 수 있음
● 조합의 접근법 : 이미 그 전단계의 데이터의 선택여부가 결정되었다고 생각하기
D[i][j] = D[i-1][j] + D[i-1][j-1]
백준 11050번 이항 계수 1
https://www.acmicpc.net/problem/11050
#include<iostream>
using namespace std;
int D[11][11];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, K;
cin >> N >> K;
for (int i = 0; i <= N; i++) {
D[i][0] = 1;
D[i][i] = 1;
D[i][1] = i;
}
for (int i = 2; i <= N; i++) {
for (int j = 1; j < i; j++) {
D[i][j] = D[i - 1][j] + D[i - 1][j - 1];
}
}
cout << D[N][K];
}
백준 11051번 이항 계수 2
https://www.acmicpc.net/problem/11051
#include<iostream>
using namespace std;
int D[11][11];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, K;
cin >> N >> K;
for (int i = 0; i <= N; i++) {
D[i][0] = 1;
D[i][i] = 1;
D[i][1] = i;
}
for (int i = 2; i <= N; i++) {
for (int j = 1; j < i; j++) {
D[i][j] = (D[i - 1][j] + D[i - 1][j - 1])%10007;
}
}
cout << D[N][K];
}
백준 2775번 부녀회장이 될테야
https://www.acmicpc.net/problem/2775
● 점화식 응용해서 dp형식으로 풀기
#include<iostream>
using namespace std;
int D[15][15];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T;
cin >> T;
for (int i = 0; i <= 14; i++) // 0층 채워놓기
D[0][i] = i;
for (int i = 0; i <= 14; i++)
D[i][1] = 1;
for (int i = 1; i <= 14; i++) {
for (int j = 2; j <= 14; j++) {
D[i][j] = D[i][j - 1] + D[i - 1][j];
}
}
for (int i = 0; i < T; i++) {
int a, b;
cin >> a >> b;
cout << D[a][b] << "\n";
}
}
백준 1010번 다리 놓기
https://www.acmicpc.net/problem/1010
#include<iostream>
using namespace std;
int dp[31][31];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
for (int i = 0; i <= 30; i++) {
dp[i][0] = 1;
dp[i][1] = i;
dp[i][i] = 1;
}
for (int i = 2; i <= 30; i++) {
for (int j = 1; j < i; j++) {
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];
}
}
for (int i = 0; i < N; i++) {
int a, b;
cin >> a >> b;
cout << dp[b][a] << '\n';
}
}
백준 13251번 조약돌 꺼내기
https://www.acmicpc.net/problem/13251
#include <iostream>
using namespace std;
static int M, K, T;
static int D[51];
static double probability[51];
static double ans = 0.0;
int main()
{
cin >> M;
for (int i = 0; i < M; i++) {
cin >> D[i];
T += D[i];
}
cin >> K;
for (int i = 0; i < M; i++) {
if (D[i] >= K) {
probability[i] = 1.0;
for (int k = 0; k < K; k++)
probability[i] *= (double)(D[i] - k) / (T - k);
}
ans += probability[i];
}
cout << fixed;
cout.precision(9); // 오차 범위내 출력을 위한 소수점 자리수 설정
cout << ans;
}
반응형
'Algorithm > 알고리즘 공부 일기' 카테고리의 다른 글
Algorithm 공부 #25 - 기하학(Geometry) (2) | 2024.03.30 |
---|---|
Algorithm 공부 #24 - dp(동적 계획법) (0) | 2024.03.22 |
Algorithm 공부 #22 - 최소 공통 조상(LCA) (0) | 2024.03.17 |
Algorithm 공부 #21 - 세그먼트 트리 (0) | 2024.03.16 |
Algorithm 공부 #20 - 이진 트리(Binary Tree) (0) | 2024.03.16 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 에라토스테네스의 체
- 알고리즘 공부
- DP
- js
- C++ Stack
- 자료구조
- 알고리즘
- 유클리드 호제법
- C++
- 스택
- BFS
- Do it!
- DFS
- c++ string
- 이분 매칭
- 백준
- 유니온 파인드
- 반복문
- 자바스크립트
- 스프링 부트 crud 게시판 구현
- 투 포인터
- 카운팅 정렬
- 백준 풀이
- HTML5
- 우선순위 큐
- CSS
- 세그먼트 트리
- java
- 자바
- html
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함