목록다이나믹 (26)
정화 코딩

https://www.acmicpc.net/problem/15991 #include using namespace std;int mod = 1000000009;long long s[100001] = {0};int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); s[1] = 1; s[2] = 2; s[3] = 4; for (int i = 4; i > t; for (int tn = 0; tn > n; long long ans = 0; if (n == 1 || n == 2) { ans = n; } else if (n == 3) { ..

A. 악수 (백준 8394번) https://www.acmicpc.net/problem/8394 //C++#include #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; vector dp = vector(n + 1); dp[0] = 0; dp[1] = 1; if (n >= 2) { dp[2] = 2; } for (int i = 3; i (정답) B. 가장 큰 감소하는 부분 수열 (백준 17216번) https://www.acmicpc.net/problem/17216 //C..

가장 긴 증가하는 부분 수열 (백준 11053번) https://www.acmicpc.net/problem/11053 import sysinput = sys.stdin.readlinen = int(input())a = list(map(int, input().split()))dp = [0 for _ in range(n)]maxa = 0for i in range(n): maxt = 0 for j in range(i): if a[i] > a[j]: maxt = max(maxt, dp[j]) dp[i] = maxt + 1 maxa = max(maxa, dp[i])print(maxa)dp[i] : 0부터 i까지 i를 포함하는 가장 길게 증가하는 수열의 길이앞의..

093. Dance Dance Revolution (백준 2342번) https://www.acmicpc.net/problem/2342 import sysinput = sys.stdin.readlinedata = list(map(int, input().split()))n = len(data) - 1l = [0 for _ in range(n + 1)]r = [0 for _ in range(n + 1)]p = [0 for _ in range(n + 1)]for i in range(n): if l[i] == data[i] or r[i] == data[i]: l[i + 1] = l[i] r[i + 1] = r[i] p[i + 1] = p[i] + 1 elif l[..

EDOC 2024-1 5회차 정모 (골드: 동적 계획법 알아보기 3) A https://www.acmicpc.net/problem/13270 첫번째 풀이#include #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; vector minD(n + 1, 0); vector maxD(n + 1, 0); minD[1] = maxD[1] = 0; minD[2] = maxD[2] = 1; if (n >= 3) minD[3] = maxD[3] = 2; int x1 = 2; int ..

090. LCS 2 (백준 9252번) https://www.acmicpc.net/problem/9252 import sysinput = sys.stdin.readlinestr1 = input().strip()str2 = input().strip()len1 = len(str1)len2 = len(str2)dp = [[0 for _ in range(len2 + 1)] for _ in range(len1 + 1)]memo = [[0 for _ in range(len2 + 1)] for _ in range(len1 + 1)]for i in range(1, len1 + 1): for j in range(1, len2 + 1): if str1[i - 1] == str2[j - 1]: ..

A. 1, 2, 3 더하기 (백준 9095번) https://www.acmicpc.net/problem/9095 #pythonimport sysinput = sys.stdin.readlinet = int(input())dp = [0] * 12dp[1] = 1dp[2] = 2dp[3] = 4for i in range(4, 12): dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]for _ in range(t): n = int(input()) print(dp[n])n을 1, 2, 3의 합으로 나타내려면 다음과 같은 경우의 수가 있다. (여기서 주의할 점은 1+2와 2+1가 다른 경우라는 것이다.)1) (n-1)까지 만들고 1을 더하기2) (n-2)까지 만들고 2를 더..

거리의 합 2 (백준 23330번) https://www.acmicpc.net/problem/23330문제 해석이런식으로 n개의 점이 수직선 위에 놓여 있고, 모든 점들의 쌍에 대해 두 점 사이의 거리의 합을 구하는 문제이다. 첫번째 풀이우선 가장 직관적인 풀이로 풀어보자. //C++#include #include #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; vector data(n); for (int i = 0; i > data[i]; } long long sum = 0; for (int i ..