这题为啥不能用 double 判斜率啊
查看原帖
这题为啥不能用 double 判斜率啊
375208
LawrenceSivan楼主2021/7/3 15:14

之前写的是这样的:

for(re int i=1;i<=p;i++){
        head=1;tail=0;q[++tail]=0;
        for(re int j=1;j<=m;j++){
            while(head<tail&&slope(q[head],q[head+1])<K(j))head++;
            f[i][j]=Y(q[head])-K(j)*q[head]+j*A[j]-sum[j];
            while(head<tail&&slope(q[tail-1],q[tail])<slope(q[tail-1],j))tail--;
            q[++tail]=j;
        }
    }

改成这样就 A 了:

 for(re int i=1;i<=p;i++){
        head=1;tail=0;q[++tail]=0;
        for(re int j=1;j<=m;j++){
            while(head<tail&&Y(q[head])-Y(q[head+1])>K(j)*(q[head]-q[head+1]))head++;
            f[i][j]=Y(q[head])+A[j]*(j-q[head])-sum[j];
            while(head<tail&&(Y(j)-Y(q[tail-1]))*(q[tail]-q[tail-1])<(Y(q[tail])-Y(q[tail-1]))*(j-q[tail-1]))tail--;
            q[++tail]=j;
        }
    }

可是这不是等价的吗,以前这么写没出过问题啊 ,难道是精度问题?/kk/kk/kk

2021/7/3 15:14
加载中...