| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
请问下我的程序为什么总在wa阿?-。-JAVA程序也会有精度问题么?import java.io.IOException;
public class Main {
static int n;
static double [][]source=new double[9][9];
static double [][]sum=new double[9][9];
static double [][][][][] buffer;
static double xp;
static double MIN=0.00000001;
static double all(int nn,int sx,int sy,int ex,int ey){
if(buffer[nn][sx][sy][ex][ey]!=Double.MIN_VALUE)
return buffer[nn][sx][sy][ex][ey];
if(nn==1){
buffer[nn][sx][sy][ex][ey] = sum[ex][ey] + sum[sx-1][sy-1] - sum[ex][sy-1] - sum[sx-1][ey]
- xp;
buffer[nn][sx][sy][ex][ey]*=buffer[nn][sx][sy][ex][ey];
return buffer[nn][sx][sy][ex][ey];
}
if(sx==ex&&sy==ey || sx>ex || sy>ey){
return -1.0;
}
double min=Double.MAX_VALUE;
for(int i=sx;i<ex;i++){
double a1=all(nn-1, sx, sy,i ,ey);
double a2=all(1, i+1,sy,ex,ey);
if(a1>=-MIN&&a2>=-MIN)
min=Math.min(min, a1+a2);
double b1=all(1, sx, sy,i ,ey);
double b2=all(nn-1, i+1,sy,ex,ey);
if(b1>=-MIN&&b2>=-MIN)
min=Math.min(min, b1+b2);
}
for(int j=sy;j<ey;j++){
double a1=all(nn-1, sx, sy, ex ,j) ;
double a2=all(1, sx, j+1,ex,ey);
if(a1>=-MIN&&a2>=-MIN)
min=Math.min(min, a1+a2);
double b1=all(nn, sx, sy, ex ,j);
double b2=all(nn-1, sx, j+1,ex,ey);
if(b1>=-MIN&&b2>=-MIN)
min=Math.min(min, b1+b2);
}
if(min==Double.MAX_VALUE){
min=-1.0;
return min;
}
buffer[nn][sx][sy][ex][ey] = min;
return min;
}
public static void main(String[] args) {
n=nextInt();
buffer=new double[n+1][9][9][9][9];
for(int i=0;i<=n;i++)
for(int j=0;j<9;j++)
for(int k=0;k<9;k++)
for(int l=0;l<9;l++)
for(int m=0;m<9;m++)
buffer[i][j][k][l][m]=Double.MIN_VALUE;
for(int i=1;i<=8;i++){
int lineSum=0;
for(int j=1;j<=8;j++){
source[i][j]=nextInt();
lineSum+=source[i][j];
sum[i][j]=sum[i-1][j]+lineSum;
}
}
xp=sum[8][8]*1.0/(n*1.0);
double result = Math.sqrt(all(n,1,1,8,8)*1.0/(n*1.0));
result = ((int)(result * 1000.0 + 0.5)) * 1.0 /1000.0;
//System.out.println(result);
System.out.printf("%.3f\n",result);
}
final static int nextInt(){
int v = 0;
char t = 0;
boolean neg=false;
try {
while (!Character.isDigit(t = (char) System.in.read()) && t!='-')
;
if(t=='-'){
neg=true;
t='0';
}
do {
v *= 10;
v += t - '0';
} while (Character.isDigit(t = (char) System.in.read()));
} catch (IOException e) {
}
return neg?-v:v;
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator