Investment algorithm

package Practice;


import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Scanner;


public class Practice {


public int N;
public int M;
public int [][]Map;
public Queue<Integer> resultQueue = new LinkedList<Integer>();
public List Result = new ArrayList();
public int Max = 0;

public void Init(Scanner sc)
{
N = sc.nextInt();
M = sc.nextInt();
Map = new int[N][2];

for(int i = 0; i < N; i++)
{
int index = sc.nextInt();
int max = 0;
for(int j = 0; j < M; j++)
{
int temp = sc.nextInt();
if(temp > max)
{
max = temp;
}
}
Map[i][0] = max;
Map[i][1] = index;
}
}

/*

* count
* N
* result

*/
public void Compute(int count, int N, int result)
{
int t = (int)Math.ceil((double)N/2.0);
for(int i = count+1; i < t; i++)
{
int num = N - i;
if(!resultQueue.contains(i) && !resultQueue.contains(num) && num!=i)
{
resultQueue.add(i);
resultQueue.add(num);
Result.add(resultQueue);
result = result + Map[i-1][0] + Map[num-1][0];
if(result > Max)
{
Max = result;
}
num = resultQueue.poll();
result = result - Map[num-1][0];
Compute(i, num, result);
}
}
}

public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
Practice pr = new Practice();
pr.Init(sc);
pr.Compute(0, pr.N, 0);
if(pr.Max < pr.Map[pr.N - 1][0])
{
pr.Max = pr.Map[pr.N - 1][0];
}
System.out.println(pr.Max);
}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章