728x90
출처-https://www.acmicpc.net/problem/11052
11052번: 카드 구매하기
첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)
www.acmicpc.net



내 생각 :
n개의 카드를 산다고 한다면 i가 1부터 2/n까지 dp[n-i]+dp[i]와 기존의 dp[n]을 비교해서 가장 큰 값을 dp[n]에 넣어준다.
이렇게 1부터 n까지의 dp 배열을 순서대로 저장해주면 가장 큰 수를 찾을 수 있다.
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int dp[]=new int[n+1];
for (int i=1;i<=n;i++)
dp[i]=scan.nextInt();
for (int i=2;i<=n;i++) {
for (int j=0;j<=i/2;j++) {
if (dp[i]<(dp[i-j]+dp[j]))
dp[i]=dp[i-j]+dp[j];
}
}
System.out.println(dp[n]);
}
}728x90
'Problem Solving > BOJ' 카테고리의 다른 글
| [백준, BOJ 1932] 정수 삼각형 (java) (0) | 2020.08.19 |
|---|---|
| [백준, BOJ 1149] RGB거리 (java) (0) | 2020.08.18 |
| [백준, BOJ 10992] 별 찍기 - 17 (java) (0) | 2020.08.14 |
| [백준, BOJ 10991] 별 찍기 - 16 (java) (0) | 2020.08.14 |
| [백준, BOJ 2446] 별 찍기 - 9 (java) (0) | 2020.08.14 |