Submission #991738

#TimeUsernameProblemLanguageResultExecution timeMemory
991738CallieBank (IZhO14_bank)Java
100 / 100
265 ms58216 KiB
import java.io.*;
import java.util.*;

public class bank {
	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(in.readLine());
		
		int people = Integer.parseInt(st.nextToken());
		int banknotes = Integer.parseInt(st.nextToken());
		int[] plist = new int[people];
		int[] blist = new int[banknotes];
		
		st = new StringTokenizer(in.readLine());
		for(int i = 0; i < people; i++) {
			plist[i] = Integer.parseInt(st.nextToken());
		}
		
		st = new StringTokenizer(in.readLine());
		for(int i = 0; i < banknotes; i++) {
			blist[i] = Integer.parseInt(st.nextToken());
		}
		
		int[][] dp = new int[1 << banknotes][2];
		for(int i = 0; i < (1 << banknotes); i++) {
			dp[i][0] = -1;
			dp[i][1] = -1;
		}
		dp[0][0] = 0;
		dp[0][1] = 0;
		
		for(int i = 0; i < (1 << banknotes); i++) {
			for(int j = 0; j < banknotes; j++) {
				if((i & (1 << j)) == 0) continue;
				if(dp[i ^ (1 << j)][0] == -1) continue;
				if(dp[i ^ (1 << j)][0] == people) continue;
				
				int p = dp[i ^ (1 << j)][0];
				int b = dp[i ^ (1 << j)][1];
				
				if(b + blist[j] < plist[p]) {
					dp[i][0] = p;
					dp[i][1] = b + blist[j];
				}
				else if(b + blist[j] == plist[p]) {
					dp[i][0] = p + 1;
					dp[i][1] = 0;
				}
				
//				if(p > dp[i ^ (1 << j)][0]) {
//					dp[i^ (1 << j)][0] = p;
//					dp[i^ (1 << j)][1] = b;
//				}
//				else if(p == dp[i ^ (1 << j)][0] && b > dp[i ^ (1 << j)][1]) {
//					dp[i ^ (1 << j)][1] = b;
//				}
			}
		}
		
		for(int i = 0; i < (1 << banknotes); i++) {
			if(dp[i][0] == people) {
				System.out.println("YES");
				return;
			}
		}
		
		System.out.println("NO");
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...