[백준] 2839번 설탕 배달 (java)
728x90
반응형
완전탐색 + 메모이제이션 기법을 사용
만약 같은 무게를 다시 재귀로 들어올 경우 기존보다 사용한 봉지의 수가 더 작을 경우만 vis[해당무게]를 업데이트하고 완전 탐색을 돌려준다. 만약 같은 무게인데 사용한 봉지의 수가 더 많은 경우는 더이상 검사할 필요가 없다.
import java.util.Scanner;
public class Main {
static int n;
static int ans=Integer.MAX_VALUE;
static int[] vis=new int[5001];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
subset(0,n);
System.out.println(ans==Integer.MAX_VALUE?-1:ans);
}
private static void subset(int cnt, int weight) {
if(weight==0) {
ans=Math.min(ans, cnt);
return;
}
if(weight-3>=0) {
if(vis[weight-3]==0 || vis[weight-3]>cnt+1) {
vis[weight-3]=cnt+1;
subset(cnt+1,weight-3);
}
}
if(weight-5>=0) {
if(vis[weight-5]==0 || vis[weight-5]>cnt+1) {
vis[weight-5]=cnt+1;
subset(cnt+1,weight-5);
}
}
}
}
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 1074번 Z (JAVA, 완전 탐색 ) (0) | 2021.02.16 |
---|---|
[백준] 1931번 회의실 배정 (java, 그리디) (0) | 2021.02.16 |
[백준] 3040번 백설 공주와 일곱 난쟁이 (0) | 2021.02.15 |
[백준] 2961번 도영이가 만든 맛있는 음식 (java, 부분 집합 subset) (0) | 2021.02.15 |
[백준] 17406. 배열돌리기4 (JAVA) (0) | 2021.02.10 |
TAGS.