アットウィキロゴ

未完成 別解法 最適所得税

package w;
 
 
class nonlinear{ 
 
int s,n1,n2; 
int[] th= new int[101]; 
int[] c= new int[101]; 
int[] y= new int[101]; 
double[][][] ux= new double[101][21][21]; 
double[][][] wx= new double[101][21][21]; 
int[][][] nearw= new int[101][21][21]; 
double[][][] us= new double[101][21][21]; 
double[][][] v= new double[101][21][101];
int[][][] gotob= new int[101][21][101];
int[][][] gotom= new int[101][21][101];
int[] ws= new int[101]; 
double c1,l1,u1;
double h;
int b,bx;
int m1,m2;
 
void makedata(){ 
 
makeus sub=new makeus();
sub.th=th;
sub.h=h;
sub.c=c;
sub.y=y;
sub.makedata();
us=sub.us;
 
 
 
s=1;
 
for(m1=-10;m1<11;m1++){
for(m2=-50;m2<51;m2++){
v[s][m1+10][m2+50]=-999;
}
}
 
 
for(m1=-10;m1<11;m1++){
for(m2=-10;m2<11;m2++){
v[s][m1+10][m2+50]=us[s][m1+10][m2+10];
}
}
 
int b1,z,mx;
double maxv,v1;
int bs,ms;
 
 
for(s=2;s<100;s++){
for(m1=-10;m1<11;m1++){
for(b=-50;b<51;b++){
maxv=-999;
bs=0;
ms=0;
for(mx=-10;mx<11;mx++){
for(bx=-10;bx<11;bx++){
u1=us[s][m1+10][bx+10];
b1=b-bx;
z=0;
if(b1<-50)z=100;
if(b1>50)z=100;
if(z>50)b1=0;
m2=0;
v1=u1+v[s-1][m2+10][b1+50];
if(z>50)v1=-999;
if(v1>maxv)bs=b1;
if(v1>maxv)ms=mx;
if(v1>maxv)maxv=v1;
}
}
v[s][m1+10][b+50]=maxv;
}
}
}
 
 
 
 
 
 
 
}
 
 
 
double u(double c1,double x1){ 
double u1,c2,x2; 
int pp; 
pp=0; 
c2=c1; 
x2=x1; 
if (c2<0)pp=100; 
if (x2<0)pp=100; 
if (x2>1)pp=100; 
if (x2==0)pp=100; 
if (pp>50)c2=0.5; 
if (pp>50)x2=0.5; 
u1=Math.log(c2)+Math.log(x2); 
if (pp>50)u1=-999; 
return u1; 
} 
 
}
 
 
 
 
package w;
 
 
public class makeus {
 
    int s,n1,n2; 
int[] th= new int[101]; 
int[] c= new int[101]; 
int[] y= new int[101]; 
double[][][] ux= new double[101][21][21]; 
double[][][] wx= new double[101][21][21]; 
int[][][] nearw= new int[101][21][21]; 
double[][][] us= new double[101][21][21]; 
int[] ws= new int[101]; 
double c1,l1,u1;
double h;
int b;
 
    void makedata(){
 
 
 
for (s=1;s<101;s++){ 
for (n1=-10;n1<11;n1++){ 
for (n2=-10;n2<11;n2++){ 
c1=(c[s]+n1)*h; 
l1=(double)(y[s]+n2)/th[s]; 
u1=u(c1,1-l1);   
ux[s][n1+10][n2+10]=u1; 
} 
} 
} 
 
 
for (s=1;s<100;s++){ 
for (n1=-10;n1<11;n1++){ 
for (n2=-10;n2<11;n2++){ 
c1=(c[s]+n1)*h; 
l1=(double)(y[s]+n2)/th[s+1]; 
u1=u(c1,1-l1);   
wx[s][n1+10][n2+10]=u1; 
} 
} 
} 
 
 
double x1;
int x2;
 
for (s=1;s<100;s++){ 
u1=wx[s][10][10];    
x1=Math.exp(u1);    
ws[s]=(int)(x1/h);  
}
 
for (s=1;s<100;s++){ 
for (n1=-10;n1<11;n1++){ 
for (n2=-10;n2<11;n2++){ 
u1=wx[s][n1+10][n2+10];    
x1=Math.exp(u1);    
nearw[s][n1+10][n2+10]=(int)(x1/h)-ws[s];    
} 
} 
} 
 
 
int z;
 
 
for (s=1;s<100;s++){ 
for (n1=-10;n1<11;n1++){ 
for (n2=-10;n2<11;n2++){ 
us[s][n1+10][n2+10]=-999; 
}
}
}
 
int nw;
 
for(s=1;s<100;s++){
for(b=-10;b<11;b++){
for (n1=-10;n1<11;n1++){ 
n2=b+n1;
z=0;
if(n2<-10)z=100;
if(n2>10)z=100;
if(z>50)n2=0;
u1=ux[s][n1+10][n2+10];
nw=nearw[s][n1+10][n2+10];
if(nw>10)z=100;
if(nw<-10)z=100;
if(z>50)nw=0;
if(z>50)u1=-999;
if(u1>us[s][nw+10][b+10])us[s][nw+10][b+10]=u1;
}
}
} 
 
 
 
    }
 
double u(double c1,double x1){ 
double u1,c2,x2; 
int pp; 
pp=0; 
c2=c1; 
x2=x1; 
if (c2<0)pp=100; 
if (x2<0)pp=100; 
if (x2>1)pp=100; 
if (x2==0)pp=100; 
if (pp>50)c2=0.5; 
if (pp>50)x2=0.5; 
u1=Math.log(c2)+Math.log(x2); 
if (pp>50)u1=-999; 
return u1; 
} 
 
 
 
}
 
最終更新:2013年09月24日 05:24