1:
cin>>n;
rep(i,1,n)cin>>a[i];
memset(f,-INF,sizeof(f)),memset(g,-INF,sizeof(g));
rep(i,1,n)f[i]=Max(f[i-1]+a[i],a[i]);
rep(i,1,n)f[i]=Max(f[i-1],f[i]);
per(i,n,1)g[i]=Max(g[i+1]+a[i],a[i]);
per(i,n,1)g[i]=Max(g[i+1],g[i]);
rep(i,2,n-1)cmax(ans,f[i-1]+g[i+1]);
cout<<ans;
100分 2:
cin>>n;
rep(i,1,n)cin>>a[i];
memset(f,-INF,sizeof(f)),memset(g,-INF,sizeof(g));
rep(i,1,n)f[i]=Max(f[i-1]+a[i],a[i]),cmax(f[i],f[i-1]);
// rep(i,1,n)f[i]=Max(f[i-1],f[i]);
per(i,n,1)g[i]=Max(g[i+1]+a[i],a[i]),cmax(g[i],g[i+1]);
// per(i,n,1)g[i]=Max(g[i+1],g[i]);
rep(i,2,n-1)cmax(ans,f[i-1]+g[i+1]);
cout<<ans;
50分
在我的认知中这两种写法应该是等价的 然后却给出了不同的评测结果 用样例测试并打印 f,g 发现是一样的 那为什么评测结果不同呢?
附上 cmax 的实现
void cmax(int&x,int y){if(x<y)x=y;}