Submission #991737

#TimeUsernameProblemLanguageResultExecution timeMemory
991737CallieBank (IZhO14_bank)Java
27 / 100
67 ms27292 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][0] == people) continue;
				if(dp[i][0] == -1) continue;
				
				int p = dp[i][0];
				int b = dp[i][1];
				
				if(b + blist[j] < plist[p]) {
					dp[i ^ (1 << j)][0] = dp[i][0];
					dp[i ^ (1 << j)][1] = b + blist[j];
				}
				else if(b + blist[j] == plist[p]) {
					dp[i ^ (1 << j)][0] = dp[i][0] + 1;
					dp[i ^ (1 << j)][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 - 1 && dp[i][1] == blist[banknotes - 1]) {
				System.out.println("YES");
				return;
			}
			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...