import java.util.*; class teem{ int self; int point=0; } public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int t = in.nextInt(); for(int i =0;i<t;i++) { int n=in.nextInt(); int m=in.nextInt(); int win = in.nextInt(); int equal= in.nextInt(); int lose = in.nextInt(); ArrayList<int[]> allmatch = new ArrayList<int[]>(); int count=0; for(int j =0;j<n;j++) { for(int l=j+1;l<n;l++) { int[] match = {j,l}; allmatch.add(match); } } ArrayList<teem> AL = new ArrayList<teem>(); for(int j =0;j<n;j++) { teem tm = new teem(); tm.self=j; AL.add(tm); } System.out.println("Case #"+(i+1)+": "+getmaxandmin(n,m,AL,allmatch,win,equal,lose)[0]+" "+getmaxandmin(n,m,AL,allmatch,win,equal,lose)[1]); } } public static int[] getmaxandmin(int n,int m,ArrayList<teem> allteem,ArrayList<int[]> allmatch,int win,int equal,int lose) { if(allmatch.size()==0) { ArrayList<Integer> allpoint = new ArrayList<Integer>(); for(teem t:allteem) { allpoint.add(t.point); } Collections.sort(allpoint); int topmax = allpoint.get(allpoint.size()-m-1); int topmin = allpoint.get(allpoint.size()-m); int[] maxandmin = {topmax,topmin}; return maxandmin; }else { int i =0; int[] copy = allmatch.get(i); for(teem t:allteem) { if(t.self==allmatch.get(i)[0]) { t.point+=win; } if(t.self==allmatch.get(i)[1]) { t.point+=lose; } } //System.out.println(allmatch.get(i)[0]+"win "+allmatch.get(i)[1]+"lose"); allmatch.remove(i); int[] case1 = getmaxandmin(n,m,allteem,allmatch,win,equal,lose); allmatch.add(i, copy); for(teem t:allteem) { if(t.self==allmatch.get(i)[0]) { t.point-=win; } if(t.self==allmatch.get(i)[1]) { t.point-=lose; } } for(teem t:allteem) { if(t.self==allmatch.get(i)[0]) { t.point+=equal; } if(t.self==allmatch.get(i)[1]) { t.point+=equal; } } //System.out.println(allmatch.get(i)[0]+"equal "+allmatch.get(i)[1]+"equal"); allmatch.remove(i); int[] case2 = getmaxandmin(n,m,allteem,allmatch,win,equal,lose); allmatch.add(i, copy); for(teem t:allteem) { if(t.self==allmatch.get(i)[0]) { t.point-=equal; } if(t.self==allmatch.get(i)[1]) { t.point-=equal; } } for(teem t:allteem) { if(t.self==allmatch.get(i)[0]) { t.point+=lose; } if(t.self==allmatch.get(i)[1]) { t.point+=win; } } //System.out.println(allmatch.get(i)[0]+"lose "+allmatch.get(i)[1]+"win"); allmatch.remove(i); int[] case3 = getmaxandmin(n,m,allteem,allmatch,win,equal,lose); allmatch.add(i, copy); for(teem t:allteem) { if(t.self==allmatch.get(i)[0]) { t.point-=lose; } if(t.self==allmatch.get(i)[1]) { t.point-=win; } } int max= maxinthree(case1[0],case2[0],case3[0]); int min= mininthree(case1[1],case2[1],case3[1]); int[] maxandmin = {max,min}; return maxandmin; } } public static int C(int m,int n) { double s=1; for(int i =0;i<n;i++) { s=s*(m--)/(i+1); } return (int)s; } public static int mininthree(int a,int b,int c) { int temp = a<b?a:b; int max = temp<c?temp:c; return max; } public static int maxinthree(int a,int b,int c) { int temp = a>b?a:b; int max = temp>c?temp:c; return max; } } |
Double click to view unformatted code.