한 번 계산한 결과를 메모리 공간에 메모하는 기법
값을 기록해 놓는다는 점에서 캐싱이라고도 함
하향식
상향식
전형적인 형태
결과 저장용 리스트 = DP테이블
1,1,2,3,5,8,13,21,34,55,89,...
점화식: An = An-1 + An-2, A1=1, A2=1
public static long[] d = new long[100];
public static void main(String[] args){
d[1]=1;
d[2]=1;
int n=50; //50번째 피보나치 수를 계산
for(int i=3; i<=n; i++){
d[i] = d[i-1]+d[i-2];
}
System.out.println(d[n]); //실행결과:12586269025
}
public static int[] d = new int[100]; //DP테이블 초기화
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//정수 n을 입력받기
int n = sc.nextInt();
//모든 식량 정보 입력받기
int[] arr = new int[n];
for(int i=0; i<arr.length; i++){
arr[i]=sc.nextInt();
}
//DP진행(보텀업)
d[0]=arr[0];
d[1]=Math.max(arr[0],arr[1]);
for(int i=2; i<n; i++){
d[i]=Math.max(d[i-1],d[i-2]+arr[i]);
}
//계산된 결과 출력
System.out.println(d[n-1]);
}