package line6;
public class pro {
int[] p=new int[101];
int[] pr=new int[101];
int[] point=new int[101];
int s,number;
double[][] v=new double[101][11];
int[][] gotos=new int[101][11];
int[] op=new int[101];
public static void main(String[] args) {
pro t=new pro();
}
pro(){
number=100;
for(s=1;s<number+1;s++){
p[s]=(int)Math.floor(10*Math.random())+1;
}
for(s=1;s<number+1;s++){
pr[s]=0;
}
double e1;
int mode;
mode=0;
while(mode<20){
for(s=1;s<11;s++){
v[1][s]=u(1,s);
}
int t,sx,sxs;
double maxv;
for(t=2;t<101;t++){
for(s=1;s<11;s++){
e1=u(t,s);
maxv=999;
sxs=0;
for(sx=1;sx<11;sx++){
double v1=e1+v[t-1][sx];
double e2=(s-sx)*(s-sx);
if(e2>3)v1=999;
if(maxv>v1)sxs=sx;
if(maxv>v1)maxv=v1;
}
v[t][s]=maxv;
gotos[t][s]=sxs;
}
}
maxv=999;
sxs=0;
for(s=1;s<11;s++){
if(v[number][s]<maxv)sxs=s;
if(v[number][s]<maxv)maxv=v[number][s];
}
op[number]=sxs;
for(s=1;s<number;s++){
t=number+1-s;
sx=op[t];
op[t-1]=gotos[t][sx];
}
mode=mode+1;
for(s=1;s<number+1;s++){
point[s]=op[s];
}
for(s=1;s<number+1;s++){
pr[s]=point[s];
}
}
for(s=1;s<number+1;s++){
System.out.println(p[s]+","+point[s]);
}
}
double u(int s1,int p1){
double e1=0;
if(p[s1]>0)e1=(p1-p[s1])*(p1-p[s1]);
if(pr[s1]>0)e1=e1+(p1-pr[s1])*(p1-pr[s1]);
return e1;
}
}
最終更新:2015年04月28日 06:57