본문 바로가기

알고리즘/DP89

1351 무한 수열 123456789101112131415161718192021222324252627282930313233343536373839404142#include #include using namespace std; long long dfs(long long num); long long p, q;map mp; int main() { long long n; scanf("%lld %lld %lld", &n, &p, &q); long long rst = dfs(n); printf("%lld", rst);} long long dfs(long long num) { if (num == 0) return 1; long long l = num / p; long long r = num / q; long long lv, rv; if .. 2020. 2. 29.
2240 자두나무 123456789101112131415161718192021222324252627282930313233#include #include using namespace std; int main() { int t, w; scanf("%d %d", &t, &w); int plum[1001] = { 0 }; for (int i = 1; i 2020. 2. 28.
7579 앱 12345678910111213141516171819202122232425262728293031323334353637#include #include using namespace std; int main() { int n, m; scanf("%d %d", &n, &m); int app[101] = { 0 }; int cost[101] = { 0 }; for (int i = 1; i > 이 배열을 떠올리지 못했다.대체 어떻게 이런 생각을 해내는거지? 2. 어찌됐든, 저 발상을 가지고 시작하면 그나마 수월하다메모장에 하나씩 써보면, 결국 그 전의 어플리케이션 기록을 기반으로 dp를 갱신해야 된다는 것을 알게 된다 3. 또한, 매 턴마다 해당 어플을 비활성화 할 수도, 안 할 수도 있다 4. 위의 매커니즘을 모.. 2020. 2. 28.
2302 극장 좌석 123456789101112131415161718192021222324252627282930313233343536373839404142#include int main() { int total, n; scanf("%d %d", &total, &n); int len_num[50] = { 0 }, bef = 1; while (n--) { int cur; scanf("%d", &cur); int len = cur - bef; len_num[len]++; bef = cur+1; } len_num[total - bef + 1]++; int maxV = -1; for(int i=40;i>0;i--) if (len_num[i] > 0) { maxV = i; break; } int dp[50] = { 0 }; dp[1].. 2020. 2. 28.
11066 파일합치기 12345678910111213141516171819202122232425262728293031323334353637#include int main() { int t; scanf("%d", &t); while (t--) { int n; scanf("%d", &n); int dp[501][501] = { 0 }; int sum[501] = { 0 }; for (int i = 1; i 2020. 2. 28.
11052 카드 구매하기 1234567891011121314151617181920212223242526#include #include using namespace std; int main() { int n; scanf("%d", &n); vector arr(n + 1, 0); vector dp(n + 1, 0); for (int i = 1; i 2020. 2. 27.
DP정리> 동전 문제 2020. 1. 12.
DP 정리> 타일 채우기 # 문제 모음 11726번 - 2*n 타일링 11727번 - 2*n 타일링 21793번 - 타일링 (2*n 타일링. 큰 숫자 다루기)2133번 - 타일 채우기 (3*n 타일) 2718번 - 타일 채우기 (4*n 타일)-----------------------------------------1720번 - 타일 코드 (타일 뒤집기) : 기본 2*n 타일 문제에서, 중복되는 경우를 제거하기 위해 교집합을 더한 다음 /2 연산을 해준다-----------------------------------------1904번 - 01타일 (숫자 다루기) : 그냥 나열하다 보면 알아서 규칙이 나온다 # 기본적인 접근 방식 - Top Down 접근 : 전체 완성본에서, width-1, width-2... 등등을 고려해서 식.. 2020. 1. 12.
1720 타일코드 12345678910111213141516171819202122232425262728293031323334#include long long dp[1005] = { 0 }; int main() { int n; scanf("%d", &n); if (n == 1) { printf("1"); return 0; } else if (n == 2) { printf("3"); return 0; } dp[1] = 1; dp[2] = 3; for (int i = 3; i 2020. 1. 11.
9461 파도반 수열 1234567891011121314151617181920212223242526272829303132#include int arr[1000005] = { 0 };long long dp[105] = { 0 }; void makeDP(int maxV) { dp[1] = 1; dp[2] = 1; dp[3] = 1; dp[4] = 2; dp[5] = 2; for (int i = 6; i 2019. 7. 15.
10942 팰린드롬? 123456789101112131415161718192021222324252627282930313233343536373839404142#include int arr[2005] = { 0 };int dp[2005][2005] = { 0 };int n; void makeDP() { for (int i = 1; i 2019. 7. 15.
1695 팰린드롬 만들기 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556#include int arr[5005] = { 0 };int dp[5005][5005] = { 0 }; int div(int l, int r) { if (dp[l][r] != 0) { return dp[l][r]; } if (l == r) { dp[l][r] = 0; return 0; } else if (l + 1 == r) { if (arr[l] != arr[r]) dp[l][r] = 1; else dp[l][r] = 0; return dp[l][r]; } if (arr[l] == arr[r]) { dp[l][r] = .. 2019. 7. 15.