社区讨论

额外提供一种空间复杂度O(1) 的做法

AT_abc162_f [ABC162F] Select Half参与者 27已保存回复 97

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
97 条
当前快照
1 份
快照标识符
@lo33pjss
此快照首次捕获于
2023/10/24 00:17
2 年前
此快照最后确认于
2023/10/24 00:17
2 年前
查看原帖
这一篇题解的优化依然没有到尽头。
我们发现在转移中,fi,f_{i,\cdots} 只和 fi1,f_{i-1,\cdots} 相关,所以可以直接把 ii 这一维压掉。
然后发现 aia_i 也没啥存的必要性,也压掉。
空间复杂度 O(1)O(1) 了。
CPP
#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]));
}

回复

97 条回复,欢迎继续交流。

正在加载回复...