package ren;
import tool.*;
public class pro {
String[] data=new String[5000];
int s,datanumber,sx;
double[] point=new double[5000];
double[][][] v=new double[500][3][110];
int[][][] gotos=new int[500][3][110];
int[][][] gotoc=new int[500][3][110];
double minp,maxp;
double delta;
int[] route_s=new int[500];
int[] route_c=new int[500];
public static void main(String[] args) {
pro test=new pro();
}
pro(){
readfile sub=new readfile();
sub.makedata("data.txt","UTF-8");
data=sub.data;
datanumber=sub.datanumber;
for(s=1;s<datanumber+1;s++){
point[s]=Double.parseDouble(data[s]);
}
minp=999;
maxp=0;
for(s=1;s<datanumber+1;s++){
if(point[s]>maxp)maxp=point[s];
if(point[s]<minp)minp=point[s];
}
System.out.println(maxp+","+minp);
delta=(maxp-minp)/100;
double x1,e1,v1;
int tx;
for(sx=0;sx<101;sx++){
x1=minp+sx*delta;
e1=(x1-point[s])*(x1-point[s]);
v[1][1][sx]=e1;
v[1][2][sx]=e1;
}
double minv;
int txs,c,cx,cxs;
int h;
for(s=1;s<datanumber+1;s++){
for(sx=0;sx<101;sx++){
for(c=1;c<3;c++){
x1=minp+sx*delta;
e1=(x1-point[s])*(x1-point[s]);
minv=99999;
txs=0;
cxs=0;
for(cx=1;cx<3;cx++){
for(tx=0;tx<101;tx++){
v1=e1+v[s-1][cx][tx];
h=0;
if(c==1)h=h+1;
if(tx>sx)h=h+1;
if(h==2)v1=99999;
h=0;
if(c==2)h=h+1;
if(sx>tx)h=h+1;
if(h==2)v1=99999;
if(v1<minv)txs=tx;
if(v1<minv)cxs=cx;
if(v1<minv)minv=v1;
}
}
v[s][c][sx]=minv;
gotos[s][c][sx]=txs;
gotoc[s][c][sx]=cxs;
}
}
}
int sxs;
minv=999;
s=datanumber;
sxs=0;
cx=0;
for(sx=0;sx<101;sx++){
for(c=1;c<3;c++){
if(v[s][c][sx]<minv)cx=c;
if(v[s][c][sx]<minv)sxs=sx;
if(v[s][c][sx]<minv)minv=v[s][c][sx];
}
}
System.out.println(sxs+","+cx+","+minv);
route_s[datanumber]=sxs;
route_c[datanumber]=cx;
for(s=1;s<datanumber;s++){
cx=route_c[datanumber+1-s];
sx=route_s[datanumber+1-s];
route_c[datanumber-s]=gotoc[datanumber+1-s][cx][sx];
route_s[datanumber-s]=gotos[datanumber+1-s][cx][sx];
}
double p1;
for(s=1;s<datanumber+1;s++){
sx=route_s[s];
p1=minp+sx*delta;
System.out.println(point[s]+","+p1);
}
}
}
最終更新:2014年03月06日 07:53