0
点赞
收藏
分享

微信扫一扫

统计分析笔记2

三千筱夜 2024-02-28 阅读 11

登录—专业IT笔试面试备考平台_牛客网

正好遇到了

对于一维,我们只需要贪一次

int ans = -1E9;
int suf = -1E9;
for (int i = 0; i < n; i++) {
    if (i && (a[i] - a[i - 1]) % 2 == 0) {
        suf = 0;
    }
    suf = std::max(suf, 0) + a[i];
    ans = std::max(ans, suf);
}

ans就是最大值.

对于二维我们要把这个公式用四次

    ll res1 = -1e9, ans1 = -1e9;
	for (int i = 0; i < n; i++) {
		res1 = std::max(0LL, res1)+a[i];
		ans1 = std::max(ans1, res1);
	}
	ll res2 = -1e9, ans2 = -1e9;
	for (int i = 0; i < m; i++) {
		res2 = std::max(0LL, res2) + b[i];
		ans2 = std::max(ans2, res2);
	}
	ll res3 = 1e9, ans3 = 1e9;
	for (int i = 0; i < n; i++) {
		res3 = std::min(0LL, res3) + a[i];
		ans3 = std::min(res3, ans3);
	}
	ll res4 = 1e9, ans4 = 1e9;
	for (int i = 0; i < m; i++) {
		res4 = std::min(0LL, res4) + b[i];
		ans4 = std::min(res4, ans4);
	}
	//1,3是a,2,4是b,1,2,1,4,3,2,3,4
	ll ans5 = std::max(ans1 * ans2, ans1 * ans4);
	ans5 = std::max(ans5, ans3 * ans4);
	ans5 = std::max(ans5, ans3 * ans2);

排列组合求最大值

举报

相关推荐

0 条评论