acmicpc
[BAEKJOON] 7579. 앱
코드와이
2021. 4. 19. 23:17
배낭문제
문제링크
7579번: 앱
입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활
www.acmicpc.net
package acmicpc.Gold3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 앱 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[] arr1 = new int[n];
int[] arr2 = new int[n];
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < n ; i++) {
arr1[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < n ; i++) {
arr2[i] = Integer.parseInt(st.nextToken());
}
int[][] dp = new int[n][100001];
int ans = 9876421;
for(int i = 0 ; i < n ; i++) {
int memory = arr1[i];
int cost = arr2[i];
for(int j = 0 ; j < 100001 ; j++) {
if(i == 0) {
if(j >= cost) dp[i][j] = memory;
} else {
if(j >= cost) dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j - cost] + memory);
else dp[i][j] = dp[i-1][j];
}
if(m <= dp[i][j]) ans = Math.min(ans, j);
}
}
System.out.println(ans);
}
}