额外提供一种空间复杂度O(1) 的做法
查看原帖
额外提供一种空间复杂度O(1) 的做法
575994
Hisaishi_Kanade楼主2023/2/19 21:19

这一篇题解的优化依然没有到尽头。

我们发现在转移中,fi,f_{i,\cdots} 只和 fi1,f_{i-1,\cdots} 相关,所以可以直接把 ii 这一维压掉。

然后发现 aia_i 也没啥存的必要性,也压掉。

空间复杂度 O(1)O(1) 了。

#include <stdio.h>
#include <algorithm>
using std::max;
long long f[2][3]; 
int main()
{
	int n,i,x;
	scanf("%d %d",&n,&x); 
	f[1][2]=x;
	for(i=2;i<=n;++i)
	{
        scanf("%d",&x);
		f[i&1][0]=max(f[!(i&1)][1],f[!(i&1)][i%2*2]);
		f[i&1][1]=i%2*x+f[!(i&1)][!(i%2)*2];
		f[i&1][2]=f[!(i&1)][i%2]+x;
	}
	printf("%lld\n",max(f[n&1][!(n%2)*2],f[n&1][1]));
}
2023/2/19 21:19
加载中...