本人妹子,刚学OI,被毒瘤了88pts,求助

P3648 [APIO2014] 序列分割

您为什么要强调您是妹子呢0.0
by 靛涟 @ 2019-04-16 23:33:26


这个高亮好像不是cpp ```cpp #include<bits/stdc++.h> using namespace std; const int maxn=100010,maxk=210; long long f[maxn],g[maxn],s[maxn]; int n,K1; int pre[maxn][maxk],q[maxn]; double X(int i){ return s[i]; } double Y(int i){ return g[i]-s[i]*s[i]; } double K(int i,int j){ double mo=X(j)-X(i); return !mo ? -1e18 : (Y(i)-Y(j))/mo; } int main(){ cin>>n>>K1; for(int i=1;i<=n;i++){ scanf("%lld",&s[i]); s[i]+=s[i-1]; } for(int k=1;k<=K1;k++){ int head=1,tail=1;q[1]=0; for(int i=1;i<=n;i++){ while(head<tail && K(q[head],q[head+1])<=s[i]) head++; int j=q[head]; f[i]=g[j]+(s[i]-s[j])*s[j]; pre[i][k]=j; while(head<tail && K(q[tail],q[tail-1])>=K(i,q[tail])) tail--; q[++tail]=i; } memcpy(g,f,sizeof(g)); } printf("%lld\n",f[n]); for(int i=K1,u=n;i>=1;i--){ u=pre[u][i]; printf("%d ",u); } return 0; } ```
by Smile_Cindy @ 2019-04-17 08:49:51


@[人殇物已非](/space/show?uid=64611) 斜率优化dp是吧?方程发一下
by Smile_Cindy @ 2019-04-17 08:50:17


@[Alpha](/space/show?uid=87058) $-s[i]*s[j]+f[i]=g[j]-s[j]*s[j];$ $-s[i]=k$ $s[j]=x$ $f[i]=b$ $g[j]-s[j]*s[j]=y$
by 人殇物已非 @ 2019-04-17 08:57:09


@[Alpha](/space/show?uid=87058) ```cpp // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std; const int maxn=100010,maxk=210; long long f[maxn],g[maxn],s[maxn]; int n,K1; int pre[maxn][maxk],q[maxn]; double X(int i){ return 1.0*s[i]; } double Y(int i){ return 1.0*(g[i]-s[i]*s[i]); } double K(int i,int j){ return X(i)==X(j) ? -1e18 : (Y(i)-Y(j))/(X(i)-X(j)); } int main(){ cin>>n>>K1; for(int i=1;i<=n;i++){ scanf("%lld",&s[i]); s[i]+=s[i-1]; } for(int k=1;k<=K1;k++){ int head=1,tail=1;q[1]=0; for(int i=1;i<=n;i++){ while(head<tail && K(q[head],q[head+1])>=-1.0*s[i]) head++; int j=q[head]; f[i]=g[j]+(s[i]-s[j])*s[j]; pre[i][k]=j; while(head<tail && K(q[tail],q[tail-1])<=K(i,q[tail])) tail--; q[++tail]=i; } memcpy(g,f,sizeof(g)); } printf("%lld\n",f[n]); for(int i=K1,u=n;i>=1;i--){ u=pre[u][i]; printf("%d ",u); } return 0; } ``` 这是一开始的代码,是上凸壳,也是88pts,上面贴的那个是把斜率为负强行拉正然后维护下凸壳。
by 人殇物已非 @ 2019-04-17 09:00:16


新改的一些代码在提交记录里,到最后我感觉都和题解一模一样了。。。救救孩子。
by 人殇物已非 @ 2019-04-18 10:01:32


之前有同问题,开long double解决了
by mohei0 @ 2019-05-29 13:53:48


@[人殇物已非](/space/show?uid=64611)
by mohei0 @ 2019-05-29 13:54:19


@[墨黑0](/space/show?uid=34323) 蟹蟹,确实是被卡了精度,已经AC啦~
by 人殇物已非 @ 2019-05-31 17:40:56


@[人殇物已非](/space/show?uid=64611) 您好,请问您为什么要强调自己是妹子呢?
by chdy @ 2019-06-02 09:22:10


| 下一页