ZOJ 3447 Doraemon & #39; s Number Game (Java priority queue & #183; BigInteger)
You can delete the number of 2 to k and add the product of the deleted number to the original array until only one number is left to calculate the maximum and minimum values. difference
The smaller the number of values selected, the less the number of values selected. The larger the result is, the larger the result is. Because this large number can be multiplied by the maximum number of multiples, the maximum number of times of the + 1 operation is. obviously, it is conducive to increasing the final result.
In the same way, the larger the number of items selected, the more items selected, and the smaller the final result.
In this way, the maximum value is to take the smallest two numbers at a time. The maximum k number is obtained at a time. It is easy to use the priority queue to implement the result. It is more convenient to use the BigInteger in Java.
Import java. math. bigInteger; import java. util. *; public class Main {public static void main (String args []) {role in = new role (System. in); int N = 105; PriorityQueue
Inc = new PriorityQueue
(); // The default priority of the priority queue is small. The priority is the PriorityQueue of the incremental queue.
Dec = new PriorityQueue
(N, new Comparator
() {Public int compare (BigInteger o1, BigInteger o2) {return-o1.compareTo (o2) ;}}); // implement the Comparator interface in descending order with a greater priority of int n, k; BigInteger a, B, one = BigInteger. ONE; List
List = new ArrayList
(); While (in. hasNext () {n = in. nextInt (); k = in. nextInt (); list. clear (); for (int I = 0; I <n; ++ I) {a = in. nextBigInteger (); list. add (a);} inc. addAll (list); while (inc. size ()> 1) {a = inc. poll (); B = inc. poll (); inc. add (. multiply (B ). add (one);} dec. addAll (list); while (dec. size ()> 1) {a = one; for (int I = 0; I <k; ++ I) if (dec. size ()> 0) a =. multiply (dec. poll (); a =. add (one); dec. add (a);} System. out. println (inc. poll (). subtract (dec. poll ();} in. close ();}}
ZOJ Problem Set-3447 Doraemon's Number Game Time Limit: 2 Seconds Memory Limit: 65536 KB
Doraemon and Nobita are playing a number game. First, Doraemon will give NobitaNPositive numbers. Then Nobita can deal with these numbers for two rounds. Every time Nobita can deleteI(2 ≤I≤K) Numbers from the number set. Assume that the numbers deleted is a [1], a [2]... a [I]. There shocould be a new numberX= (A [1] * a [2] *... * a [I] + 1) to be inserted back into the number set. the operation will be applied to the number set over and over until there remains only one number in the set. the number is the result of round. assume two resultsAAndBAre produced after two rounds. Nobita can get |A-B| Scores.
Now Nobita wants to get the highest score. Please help him.
Input
Input will contain no more than 10 cases. The first line of each case contains two positive integersNAndK(1 ≤N≤ 100, 1 ≤K≤ 50). The following line containsNPositive integers no larger than 50, indicating the numbers given by Doraemon.
Output
For each case, you shocould output highest score in one line.
Sample Input
6 31 3 4 10 7 15
Sample Output
5563
Hint
For most cases,N≤ 20