katte
개발새발 우주정복기
katte
전체 방문자
오늘
어제
  • 분류 전체보기 (73)
    • 블로그 소개 (1)
    • Computer (36)
      • 자료구조 (0)
      • 알고리즘&백준 (19)
      • 컴퓨터구조 (0)
      • C++ (17)
      • Kotlin (0)
    • EE (29)
      • Verilog (22)
      • 디지털 시스템 (2)
      • 집적회로설계 (1)
      • 임베디드 시스템 (4)
    • 토이프로젝트 (3)
    • 기타 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • EOF
  • ctime
  • C++ 스트림 개요
  • C++ 스트림 클래스
  • Get
  • c++
  • 함수포인터
  • C언어
  • for 루프
  • 배열포인터
  • c++ 입출력
  • 표준스트림
  • C++11
  • cin
  • 스트림
  • 입력버퍼
  • ignore
  • cctype

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
katte

개발새발 우주정복기

Computer/알고리즘&백준

[백준][C++][DP] 1932 정수 삼각형

2022. 12. 22. 13:59
 

1932번: 정수 삼각형

첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.

www.acmicpc.net

 

 

DP만 부시는 중....

비슷한 유형 계속 풀다보니 확실히 감이 생기는 것 같다. 

 

 

이 문제의 경우 점화식을 

D[n][i] = 크기 n의 정수 삼각형에서 i번째 요소를 마지막으로 선택했을 때의 최대 경로합

으로 정의하면, 

 

D[n][i] = max(D[n-1][i-1], D[n-1][i]) + a[n][i]  (i != 1 && i != n)

D[n][i] = D[n-1][i] + a[n][i]  (i == 1)

D[n][i] = D[n-1][i-1] + a[n][i] (i == n)

 

이 된다. 

 

이를 코드로 옮기면 다음과 같다. 

 

#include <iostream>

int d[501][501];
int a[501][501];

int dp(int n, int i)
{
	if (d[n][i] != -1) return d[n][i];

	if (n == 1) return a[1][1];

	if (i == 1) d[n][i] = dp(n - 1, i);
	else if (i == n) d[n][i] = dp(n - 1, i - 1);
	else
	{
		d[n][i] = dp(n - 1, i - 1);
		if (d[n][i] < dp(n - 1, i)) d[n][i] = dp(n - 1, i);
	}

	d[n][i] += a[n][i];
	return d[n][i];
}

int main()
{
	int n;
	std::cin >> n;
	for (int i = 1; i <= n; ++i)
	{
		for (int j = 1; j <= n; ++j)
			d[i][j] = -1;
	}
	for (int i = 1; i <= n; ++i)
	{
		for (int j = 1; j <= i; ++j)
			std::cin >> a[i][j];
	}
	
	int result = 0;
	for (int i = 1; i <= n; ++i)
	{
		if (result < dp(n, i)) result = dp(n, i);
	}
	std::cout << result;
}
저작자표시 (새창열림)

'Computer > 알고리즘&백준' 카테고리의 다른 글

[백준][C++][DP] 13398 연속합 2  (0) 2022.12.27
[백준][C++][DP] 2156 포도주 시식  (2) 2022.12.22
[백준][C++][DP] 11053, 14002 가장 긴 증가하는 부분 수열  (0) 2022.12.21
[백준][C++][DP] 10844 쉬운 계단 수  (0) 2022.12.20
[알고리즘] 정렬 알고리즘 - 선택 정렬, 힙 정렬, 병합 정렬, 퀵 정렬  (0) 2022.12.13
    'Computer/알고리즘&백준' 카테고리의 다른 글
    • [백준][C++][DP] 13398 연속합 2
    • [백준][C++][DP] 2156 포도주 시식
    • [백준][C++][DP] 11053, 14002 가장 긴 증가하는 부분 수열
    • [백준][C++][DP] 10844 쉬운 계단 수
    katte
    katte
    개발새발 코딩하는 블로그 / HW 위주

    티스토리툴바