본문 바로가기

dp

(21)
[BOJ] 14267번 회사 문화 1 (C++) https://www.acmicpc.net/problem/14267 14267번: 회사 문화 1 영선회사에는 매우 좋은 문화가 있는데, 바로 상사가 직속 부하를 칭찬하면 그 부하가 부하의 직속 부하를 연쇄적으로 칭찬하는 내리 칭찬이 있다. 즉, 상사가 한 직속 부하를 칭찬하면 그 부하 www.acmicpc.net #include #include #define MAX 100001 using namespace std; int n, m; vector v[MAX]; int cpm[MAX]; void dfs(int num){ for(int i = 0; i < v[num].size(); i++){ cpm[v[num][i]] += cpm[num]; dfs(v[num][i]); } } int main() { ios::..
[BOJ] 15681번 트리와 쿼리 (C++) https://www.acmicpc.net/problem/15681 15681번: 트리와 쿼리 트리의 정점의 수 N과 루트의 번호 R, 쿼리의 수 Q가 주어진다. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q ≤ 105) 이어 N-1줄에 걸쳐, U V의 형태로 트리에 속한 간선의 정보가 주어진다. (1 ≤ U, V ≤ N, U ≠ V) www.acmicpc.net #include #include #define MAX 100001 using namespace std; int dp[MAX]; vector vec[MAX]; bool visited[MAX]; void dfs(int node, int parent){ visited[node] = true; for(int i = 0; i < vec[node..
[BOJ] 11055번 가장 큰 증가 부분 수열 (C++) https://www.acmicpc.net/problem/11055 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수 www.acmicpc.net #include #include #include using namespace std; int main() { int n; cin >> n; vector arr(n); vector dp(n); for(int i = 0; i > arr[i]; } int answer = 0; for(int y = 0; y < n; ..
[BOJ] 11053번 가장 긴 증가하는 부분 수열 (C++) https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net #include #include #include using namespace std; int main() { int n; cin >> n; vector arr(n, 0); vector dp(n, 1); for (int x = 0; x > arr[x]; } int answer = 0; for..
[BOJ] 1149번 RGB거리 (C++) https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net #include #include using namespace std; int house[1001][3]; int main() { int n; cin >> n; int r, g, b; for(int i = 1; i > r >> g >> b; house[i][0] = min(house[i - 1][1], house[i - 1][2]) + r; house[i][1] = min(ho..
[BOJ] 11660번 구간 합 구하기 5 (C++) https://www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net #include using namespace std; int arr[1025][1025]; int main() { int n, m; scanf("%d %d", &n, &m); int num; for(int i = 1; i
[BOJ] 9251번 LCS (C++) https://www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net #include #include #include using namespace std; int dp[1001][1001]; int main() { ios::sync_with_stdio(false); cin.tie(NULL); string s1, s2; cin >> s1 >> s2; int s1_size = s1.length(); int s2_size = ..
[BOJ] 15988번 1, 2, 3 더하기 3 (C++) https://www.acmicpc.net/problem/15988 15988번: 1, 2, 3 더하기 3 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net #include using namespace std; int main() { int n, num; long long dp[1000001] = {0, 1, 2, 4}; for(int i = 4; i > n; for(int i = 0; i > num; cout