85pts求调
查看原帖
85pts求调
891606
2023gdgz01楼主2023/10/10 22:14

未用斜率优化写的一种不太优美的DP,WAon#9#10#16求调。

Code:

#include <cstdio>
#include <algorithm>

using namespace std;

int n, m, maxn, temp, t[505], t1[4000005], t2[4000005], sum1[4000005], sum2[4000005], f[4000005];

int main()
{
	scanf("%d%d", &n, &m);
	for (register int i = 1; i <= n; ++i)
	{
		scanf("%d", t + i);
		maxn = max(maxn, t[i]);
		++t1[t[i]];
		t2[t[i]] += t[i];
	}
	temp = maxn + m;
	for (register int i = 0; i < temp; ++i)
	{
		sum1[i] = sum1[i - 1] + t1[i];
		sum2[i] = sum2[i - 1] + t2[i];
		f[i] = sum1[i] * i - sum2[i];
	}
	for (register int i = 0; i < temp; ++i)
	{
		if (i >= m && sum1[i - m] * i == sum1[i])
		{
			f[i] = f[i - m];
		}
		else
		{
			for (register int j = max(i - m * 2 + 1, 0); j <= i - m; ++j)
			{
				f[i] = min(f[i], f[j] - sum2[i] + sum2[j] + (sum1[i] - sum1[j]) * i);
			}
		}
	}
	printf("%d", *min_element(f + maxn + 1, f + temp));
	return 0;
}

不理解为什么第二个样例总是输出 55 。

2023/10/10 22:14
加载中...