import lombok.Data; import java.util.*; public class maintest { public static void main(String[] args){ Scanner input = new Scanner(System.in); int maxUsers = 0; int R = input.nextInt(); int[] num = new int[R+1]; int user = 0; int flag = 0; int flagX = 1; int trueMax = 0; for (int i = 0; i <= R; i++){ num[i] = input.nextInt(); } user = input.nextInt(); for (int i = R; i>=0; i--){ if (Math.pow(2,i) > user){ maxUsers += num[i]; num[i] = 0; flag = i; }else { break; } } onePace onePace = new onePace(); onePace.setFlag(flag); onePace.setMaxUsers(maxUsers); onePace.setNum(num); onePace.setFlag(flag); while (flagX == 1){ int oneUser = 0; onePace.setoneUser(oneUser); int add = add(onePace); if (add > trueMax){ trueMax = add; } int max = 0; for (int i = 0; i < flag; i++){ if (num[i] != 0){ max += num[i]*Math.pow(2,i); } } if (max > user){ flagX = 1; }else { flagX = 0; } } System.out.println(trueMax); } public static int add(onePace onePace){ for (int i = onePace.flag - 1; i > 0; i--){ if (onePace.num[i] != 0){ if (onePace.oneUser + Math.pow(2,i) <= onePace.oneUser){ onePace.num[i]--; onePace.oneUser += Math.pow(2,i); if (onePace.oneUser == onePace.user){ return addnum(onePace.maxUsers); }else { add(onePace); } }else { if (judgeBefore(onePace.num,i) == 0){ onePace.num[i]--; return addnum(onePace.maxUsers); }else { add(onePace); } } } } return onePace.maxUsers; } public static int judgeBefore(int[] num, int flag){ for (int i = flag-1; i >= 0; i--){ if (num[i] != 0){ return i; } } return 0; } public static int addnum(int maxUsers){ return maxUsers+1; } @Data public static class onePace{ int[] num; int oneUser; int maxUsers; int flag; int user; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)