반응형
https://www.acmicpc.net/problem/2758
2758번: 로또
선영이는 매주 엄청난 돈을 로또에 투자한다. 선영이가 하는 로또는 1부터 m까지 숫자 중에 n개의 수를 고르는 로또이다. 이렇게 열심히 로또를 하는데, 아직까지 한 번도 당첨되지 않은 이유는
www.acmicpc.net
[ 문제풀이 ]
1. dp[ n ][ m ] 배열을 선언하고 -1로 초기화해줍니다.
2. n번 째 로또 번호가 m일 때의 개수를 dp 배열에 저장합니다.
3. 로또 번호가 m을 넘어서면 안 되므로 m의 값을 top - down을 통해 바꿔가면서 dp의 값을 초기화합니다.
4. 매 테스트케이스마다 m의 값을 1부터 m까지 for문을 통해 돌면서 dfs( n, m )의 값을 모두 더해 출력합니다.
[ 소스코드 ]
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include<iostream> #include<cmath> #define ll long long using namespace std; int T, n, m; ll dp[11][2001]; ll dfs(int n, int m) { if (n == 1) { return 1; } ll& ret = dp[n][m]; if (ret != -1) { return ret; } ret = 0; for (int i = m / 2; i >= 1; i--) { ret += dfs(n - 1, i); } return ret; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> T; for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 2000; j++) { dp[i][j] = -1; } } for (int t = 0; t < T; t++) { cin >> n >> m; ll ans = 0; for (int i = m; i >= 1; i--) { ans += dfs(n, i); } cout << ans << '\n'; } } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 1939번 - 중량제한 (C++) (0) | 2023.08.28 |
---|---|
[ 백준 ] 11058번 - 크리보드 (C++) (0) | 2023.08.27 |
[ 백준 ] 2580번 - 스도쿠 (C++) (0) | 2023.08.25 |
[ 백준 ] 4343번 - Arctic Network (C++) (0) | 2023.08.24 |
[ 백준 ] 2463번 - 비용 (C++) (0) | 2023.08.23 |