/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static HashMap
<String, Integer
> map
= new HashMap
<String, Integer
>();
public static void main
(String[] args
){ new Ideone().run();
}
static int[] arr = new int[3];
public void run(){
arr[0] = 100;
arr[1] = 100;
arr[2] = 200;
System.
out.
println(minCost
(0,
4)); printBestAllocation(0, 4, minCost(0, 4));
}
static void printBestAllocation(int i, int n, int ans){
if(i>=arr.length){
return;
}
if(n<=0){
}
int remainingCities = arr.length - i - 1;
for(int place=1; place<=n-remainingCities; place++){
if(arr[i] % place == 0){
int ppl
= Math.
max(arr
[i
] / place, minCost
(i
+1, n
-place
)); if(ppl == ans){
System.
out.
print(place
+ " "); printBestAllocation(i+1, n-place, minCost(i+1, n-place));
return;
}
}else{
int ppl
= Math.
max(arr
[i
] / place
+ 1, minCost
(i
+1, n
-place
)); if(ppl==ans){
System.
out.
print(place
+ " "); printBestAllocation(i+1, n-place, minCost(i+1, n-place));
return;
}
}
}
}
static int minCost(int i, int n){
if(i>=arr.length){
return 0;
}
if(n<=0){
}
if(map.containsKey(s)){
return map.get(s);
}
int remainingCities = arr.length - i - 1;
for(int place=1; place<=n-remainingCities; place++){
int ppl;
if(arr[i] % place==0){
ppl
= Math.
max(arr
[i
] / place, minCost
(i
+1, n
-place
)); }else{
ppl
= Math.
max(arr
[i
] / place
+ 1, minCost
(i
+1, n
-place
)); }
best
= Math.
min(best, ppl
); }
map.put(s, best);
return best;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXN0YXRpYyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOwoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKCQluZXcgSWRlb25lKCkucnVuKCk7Cgl9CgkKCXN0YXRpYyBpbnRbXSBhcnIgPSBuZXcgaW50WzNdOwoJCglwdWJsaWMgdm9pZCBydW4oKXsKCQlhcnJbMF0gPSAxMDA7CgkJYXJyWzFdID0gMTAwOwoJCWFyclsyXSA9IDIwMDsKCQlTeXN0ZW0ub3V0LnByaW50bG4obWluQ29zdCgwLCA0KSk7CgkJcHJpbnRCZXN0QWxsb2NhdGlvbigwLCA0LCBtaW5Db3N0KDAsIDQpKTsKCX0KCQoJc3RhdGljIHZvaWQgcHJpbnRCZXN0QWxsb2NhdGlvbihpbnQgaSwgaW50IG4sIGludCBhbnMpewoJCWlmKGk+PWFyci5sZW5ndGgpewoJCQlyZXR1cm47CgkJfQoJCWlmKG48PTApewoJCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOwoJCX0KCQkKCQlpbnQgcmVtYWluaW5nQ2l0aWVzID0gYXJyLmxlbmd0aCAtIGkgLSAxOwoJCWZvcihpbnQgcGxhY2U9MTsgcGxhY2U8PW4tcmVtYWluaW5nQ2l0aWVzOyBwbGFjZSsrKXsKCQkJaWYoYXJyW2ldICUgcGxhY2UgPT0gMCl7CgkJCQlpbnQgcHBsID0gTWF0aC5tYXgoYXJyW2ldIC8gcGxhY2UsIG1pbkNvc3QoaSsxLCBuLXBsYWNlKSk7CgkJCQlpZihwcGwgPT0gYW5zKXsKCQkJCQkKCQkJCQlTeXN0ZW0ub3V0LnByaW50KHBsYWNlICsgIiAiKTsKCQkJCQlwcmludEJlc3RBbGxvY2F0aW9uKGkrMSwgbi1wbGFjZSwgbWluQ29zdChpKzEsIG4tcGxhY2UpKTsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCX1lbHNlewoJCQkJaW50IHBwbCA9IE1hdGgubWF4KGFycltpXSAvIHBsYWNlICsgMSwgbWluQ29zdChpKzEsIG4tcGxhY2UpKTsKCQkJCWlmKHBwbD09YW5zKXsKCQkJCQlTeXN0ZW0ub3V0LnByaW50KHBsYWNlICsgIiAiKTsKCQkJCQlwcmludEJlc3RBbGxvY2F0aW9uKGkrMSwgbi1wbGFjZSwgbWluQ29zdChpKzEsIG4tcGxhY2UpKTsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCX0KCQl9CgkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkJ1Z2d5IGNvZGUuIElmIHRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCIpOwoJfQoJCglzdGF0aWMgaW50IG1pbkNvc3QoaW50IGksIGludCBuKXsKCQlpZihpPj1hcnIubGVuZ3RoKXsKCQkJcmV0dXJuIDA7CgkJfQoJCWlmKG48PTApewoJCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOwoJCX0KCQlTdHJpbmcgcyA9IGkgKyAiICIgKyBuOwoJCWlmKG1hcC5jb250YWluc0tleShzKSl7CgkJCXJldHVybiBtYXAuZ2V0KHMpOwoJCX0KCQlpbnQgcmVtYWluaW5nQ2l0aWVzID0gYXJyLmxlbmd0aCAtIGkgLSAxOwoJCWludCBiZXN0ID0gSW50ZWdlci5NQVhfVkFMVUU7CgkJZm9yKGludCBwbGFjZT0xOyBwbGFjZTw9bi1yZW1haW5pbmdDaXRpZXM7IHBsYWNlKyspewoJCQlpbnQgcHBsOwoJCQlpZihhcnJbaV0gJSBwbGFjZT09MCl7CgkJCQlwcGwgPSBNYXRoLm1heChhcnJbaV0gLyBwbGFjZSwgbWluQ29zdChpKzEsIG4tcGxhY2UpKTsKCQkJfWVsc2V7CgkJCQlwcGwgPSBNYXRoLm1heChhcnJbaV0gLyBwbGFjZSArIDEsIG1pbkNvc3QoaSsxLCBuLXBsYWNlKSk7CgkJCX0KCQkJYmVzdCA9IE1hdGgubWluKGJlc3QsIHBwbCk7CgkJfQoJCW1hcC5wdXQocywgYmVzdCk7CgkJcmV0dXJuIGJlc3Q7Cgl9Cn0=