public static void main(String[] args) {
int[] stocks = {18,19,10,3,2,11,9,24,19};
simpleStock(stocks);
MutiStock(stocks,3);
MutiStock2(stocks,3);
}
private static void simpleStock(int[] stocks){
int smallValue, diff = Integer.MIN_VALUE;
int startIndex=0,endIndex=0;
smallValue = stocks[0];
for (int i = 1; i < stocks.length; i++) {
int item = stocks[i];
if (item > smallValue && diff < item - smallValue) {
diff = item-smallValue;
endIndex = i;
}else if(item<smallValue){
smallValue=item;
startIndex = i;
}
}
System.out.println(endIndex + " , " + startIndex + ", diff = " + diff);
}
private static void MutiStock(int[] stocks,int K){
int size = stocks.length;
int [][] s = new int[K+1][stocks.length];
for (int k = 1; k <=K ; k++) {
for (int i = 1; i<size; i++) {
s[k][i] = s[k][i-1];
for (int j = 0; j <i; j++) {
s[k][i] = Math.max(s[k][i],s[k-1][j]+stocks[i]-stocks[j]);
}
}
}
for (int i = 0; i < stocks.length; i++) {
System.out.print(stocks[i]+" ");
}
System.out.println("");
for (int i = 1; i <=K; i++) {
for (int j = 0; j < stocks.length; j++) {
System.out.print(s[i][j]+" ");
}
System.out.println("");
}
}
private static void MutiStock2(int[] stocks,int K){
int size = stocks.length;
SNode [][] s = new SNode[K+1][stocks.length];
s[1][0] = new Stock.SNode();
s[2][0] = new Stock.SNode();
s[3][0] = new Stock.SNode();
for (int i = 0; i < size; i++) {
s[0][i] = new SNode();
}
for (int k = 1; k <=K ; k++) {
for (int i = 1; i<size; i++) {
s[k][i] = new SNode();
s[k][i].value = s[k][i-1].value;
s[k][i].preIndex = -1;
int tmp = s[k][i].value;
for (int j = 0; j <i; j++) {
if(s[k][i].value>s[k-1][j].value+stocks[i]-stocks[j]){
}else {
s[k][i].value = s[k-1][j].value+stocks[i]-stocks[j];
s[k][i].preIndex = j;
}
}
if(s[k][i].value!=tmp){
System.out.println("time = " + k + ", i = " + s[k][i].preIndex +"买入,i = " + i+"卖出");
}
}
}
System.out.println(s[K][size-1]);
}
static class SNode{
public int value;
public int preIndex;
}