アットウィキロゴ

46 46 46

class pro{
public static void main(String args[]){
int m,s,n1,n2,m1,m2,mx1,mx2,nx1,nx2,s1;
double h,cost;
double[] th=new double[101];
double[] x=new double[101];
double[] px=new double[101];
double[][][] rev=new double[101][3][3];
double[][][] u=new double[101][3][3];
double[][][] w=new double[101][3][3];
double[][][] v=new double[101][3][3];
int[][][] goto1=new int[101][3][3];
int[][][] goto2=new int[101][3][3];
double[][][] vs=new double[101][3][3];
int[] op1=new int[101];
int[] op2=new int[101];
double p,r1,maxrev,maxp,v1;
double maxv;
double p1,x1,u1;
double ep;
int t1,t2;
for (s=1;s<101;s++){
th[s]=s;
}
maxrev=-999;
maxp=0;
for (m=0;m<41;m++){
p=10+m;
r1=rev(th,p);
if (r1>maxrev)maxp=p;;
if (r1>maxrev)maxrev=r1;
}
p=maxp;
for (s=1;s<101;s++){
x[s]=d(s,th,p);
}
for (s=1;s<101;s++){
px[s]=p*x[s];
}
cost=10;
h=0.2;
t2=0;
while(t2<5){
h=h/2;
t1=0;
while(t1<100){
for (s=1;s<101;s++){
for (n1=-1;n1<2;n1++){
for (n2=-1;n2<2;n2++){
p1=px[s]+n1*h;
x1=x[s]+n2*h;
r1=p1-cost*x1;
if (x1<0)r1=-999;
rev[s][n1+1][n2+1]=r1;
}
}
}
for (s=1;s<101;s++){
for (n1=-1;n1<2;n1++){
for (n2=-1;n2<2;n2++){
p1=px[s]+n1*h;
x1=x[s]+n2*h;
u1=th[s]*Math.log(x1+1)-p1;
if (u1<0)u1=-999;
u[s][n1+1][n2+1]=u1;
}
}
}

for (s=1;s<100;s++){
for (n1=-1;n1<2;n1++){
for (n2=-1;n2<2;n2++){
p1=px[s]+n1*h;
x1=x[s]+n2*h;
u1=th[s+1]*Math.log(x1+1)-p1;
if (u1<0)u1=-999;
w[s][n1+1][n2+1]=u1;
}
}
}

s=1;
for (n1=-1;n1<2;n1++){
for (n2=-1;n2<2;n2++){
v[s][n1+1][n2+1]=rev[s][n1+1][n2+1];
}
}
for (s=2;s<101;s++){
for (n1=-1;n1<2;n1++){
for (n2=-1;n2<2;n2++){
r1=rev[s][n1+1][n2+1];
u1=u[s][n1+1][n2+1];
maxv=-999;
mx1=0;
mx2=0;
for (m1=-1;m1<2;m1++){
for (m2=-1;m2<2;m2++){
v1=r1+v[s-1][m1+1][m2+1];
if (w[s-1][m1+1][m2+1]>u1)v1=-999;
if (v1>maxv)mx1=m1;
if (v1>maxv)mx2=m2;
if (v1>maxv)maxv=v1;
}
}
goto1[s][n1+1][n2+1]=mx1;
goto2[s][n1+1][n2+1]=mx2;
v[s][n1+1][n2+1]=maxv;
}
}
}

maxv=-999;
nx1=0;
nx2=0;
for (n1=-1;n1<2;n1++){
for (n2=-1;n2<2;n2++){
v1=v[100][n1+1][n2+1];
if (v1>maxv)nx1=n1;
if (v1>maxv)nx2=n2;
if (v1>maxv)maxv=v1;
}
}
op1[100]=nx1;
op2[100]=nx2;
op1[99]=goto1[100][nx1+1][nx2+1];
op2[99]=goto2[100][nx1+1][nx2+1];

for (s1=1;s1<99;s1++){
s=100-s1;
op1[s-1]=goto1[s][op1[s]+1][op2[s]+1];
op2[s-1]=goto2[s][op1[s]+1][op2[s]+1];
}
ep=0;
for (s=1;s<101;s++){
ep=ep+Math.pow(op1[s],2)+Math.pow(op2[s],2);
}
System.out.println(maxv);
for (s=1;s<101;s++){
x[s]=x[s]+h*op2[s];
px[s]=px[s]+h*op1[s];
}
if (ep<3)t1=1000;
t1=t1+1;
}
t2=t2+1;
}

for (s=1;s<101;s++){
System.out.print(px[s]);
System.out.print(",");
System.out.println(x[s]);
}





}
static double rev(double[] th,double p){
double x1,r1,cost;
int s;
cost=10;
r1=0;
for (s=1;s<101;s++){
x1=d(s,th,p);
r1=r1+(p-cost)*x1;;
}
return r1;
}

static double d(int s,double[] th,double p){
double x1;
x1=th[s]/p-1;
if(x1<0)x1=0;
return x1;
}
}
最終更新:2010年01月29日 03:12