求助一个关于Subteck2的问题
  • 板块P1725 琪露诺
  • 楼主卷王慢即快
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/11/29 19:30
  • 上次更新2023/10/27 00:59:16
查看原帖
求助一个关于Subteck2的问题
494699
卷王慢即快楼主2022/11/29 19:30

为什么要把 fif_i 初始化为 0xcf0xcf 呢?

Subteck2 全错代码:

#include <bits/stdc++.h>
using namespace std;
int n, l, r, ans = -10000000;
int a[200001], f[200001];
int q[200001]; //优先队列 
int main()
{
	cin >> n >> l >> r;
	for(int i = 0; i <= n; i++)
		cin >> a[i];
	//memset(f, 0xcf, sizeof(f));
	//f[0] = 0;
	int head = 0, tail = -1;
	for(int i = l; i <= n; i++)
	{
		while(head <= tail && q[head] < i - r) head++;
		while(head <= tail && f[i - l] > f[q[tail]]) tail--;
		q[++tail] = i - l;
		f[i] = f[q[head]] + a[i];
	}
	for(int i = n + 1 - r; i <= n; i++)
		ans = max(ans, f[i]);
	cout << ans;
	return 0;
}

Subteck2 全对代码:

#include <bits/stdc++.h>
using namespace std;
int n, l, r, ans = -10000000;
int a[200001], f[200001];
int q[200001]; //优先队列 
int main()
{
	cin >> n >> l >> r;
	for(int i = 0; i <= n; i++)
		cin >> a[i];
	memset(f, 0xcf, sizeof(f));
	f[0] = 0;
	int head = 0, tail = -1;
	for(int i = l; i <= n; i++)
	{
		while(head <= tail && q[head] < i - r) head++;
		while(head <= tail && f[i - l] > f[q[tail]]) tail--;
		q[++tail] = i - l;
		f[i] = f[q[head]] + a[i];
	}
	for(int i = n + 1 - r; i <= n; i++)
		ans = max(ans, f[i]);
	cout << ans;
	return 0;
}
2022/11/29 19:30
加载中...