class pro{
public static void main(String args[]){
int s;
int n1,n2;
double th[]=new double[101];
double p[]=new double[101];
double q[]=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];
int op1[]=new int[101];
int op2[]=new int[101];
double beta;
double pp,x,c;
double u1,v1,w1;
double r,h,r1;
double maxrev,maxv;
double p1,q1;
int nx1,nx2,nxs1,nxs2;
int j,e;
int t1;
beta=1;
nx1=0;
nx2=0;
maxrev=0;
for (n1=1;n1<50;n1++){
for (n2=1;n2<11;n2++){
pp=n1;
c=n2;
for (s=1;s<101;s++){
th[s]=s;
}
r=0;
for (s=1;s<101;s++){
x=(th[s]-pp)/(2*beta);
if (x<0)x=0;
u1=th[s]*x*x-beta*x-pp*x-c;
if (u1<0)x=0;
r=r+pp*x+c;
}
if (r>maxrev)nx1=n1;
if (r>maxrev)nx2=n2;
if (r>maxrev)maxrev=r;
}
}
System.out.println(maxrev);
System.out.println(nx1);
System.out.println(nx2);
pp=nx1;
c=nx2;
for (s=1;s<101;s++){
x=(th[s]-pp)/(2*beta);
if (x<0)x=0;
u1=th[s]*x*x-beta*x-pp*x-c;
if (u1<0)x=0;
q[s]=x;
p[s]=pp*q[s]+c;
}
h=0.01;
t1=0;
while(t1<100){
for (s=1;s<101;s++){
for (n1=-1;n1<2;n1++){
for (n2=-1;n2<2;n2++){
p1=p[s]+n1*h;
q1=q[s]+n2*h;
rev[s][n1+1][n2+1]=p1;
}
}
}
for (s=1;s<101;s++){
for (n1=-1;n1<2;n1++){
for (n2=-1;n2<2;n2++){
p1=p[s]+n1*h;
q1=q[s]+n2*h;
u[s][n1+1][n2+1]=th[s]*q1-beta*q1-p1;
if (u[s][n1+1][n2+1]<0)u[s][n1+1][n2+1]=-999;
}
}
}
for (s=1;s<100;s++){
for (n1=-1;n1<2;n1++){
for (n2=-1;n2<2;n2++){
p1=p[s]+n1*h;
q1=q[s]+n2*h;
w[s][n1+1][n2+1]=th[s+1]*q1-beta*q1-p1;
}
}
}
for (n1=-1;n1<2;n1++){
for (n2=-1;n2<2;n2++){
v[1][n1+1][n2+1]=rev[1][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;
nxs1=0;
nxs2=0;
for (nx1=-1;nx1<2;nx1++){
for (nx2=-1;nx2<2;nx2++){
v1=r1+v[s-1][nx1+1][nx2+1];
w1=u[s-1][nx1+1][nx2+1];
if (w1>u1)v1=-999;
if (v1>maxv)nxs1=nx1;
if (v1>maxv)nxs2=nx2;
if (v1>maxv)maxv=v1;
}
}
goto1[s][n1+1][n2+1]=nxs1;
goto2[s][n1+1][n2+1]=nxs2;
v[s][n1+1][n2+1]=maxv;
}
}
}
nxs1=0;
nxs2=0;
maxv=-999;
for (n1=-1;n1<2;n1++){
for (n2=-1;n2<2;n2++){
v1=v[100][n1+1][n2+1];
if (v1>maxv)nxs1=n1;
if (v1>maxv)nxs2=n2;
if (v[100][n1+1][n2+1]>maxv)maxv=v1;
}
}
op1[100]=nxs1;
op2[100]=nxs2;
for (j=1;j<100;j++){
s=100-j;
n1=op1[s+1];
n2=op2[s+1];
op1[s]=goto1[s+1][n1+1][n2+1];
op2[s]=goto2[s+1][n1+1][n2+1];
}
System.out.println(maxv);
for (s=1;s<101;s++){
p[s]=p[s]+op1[s]*h;
q[s]=q[s]+op2[s]*h;
}
e=0;
for (s=1;s<101;s++){
e=e+op1[s]*op1[s];
e=e+op2[s]*op2[s];
}
System.out.println(e);
if (e<2)t1=1000;
t1=t1+1;
}
}
}
最終更新:2010年07月12日 09:26