20231016模拟赛题解

AisDaeun 4 2023-10-29

前言

最抽象的一集:2023年重现2022年国庆模拟赛

森林计数

SYOJ #251

年年有鱼

SYOJ #252

吹空调

SYOJ #253

本人目前只补完了60pts的做法,代码如下:


#include <bits/stdc++.h>

#define _for(i, a, b) for (int i = (a); i <= (b); ++i)

#define __for(i, a, b) for (int i = (a); i >= (b); --i)

int read() {

	int x = 0; bool fl(0); char ch = getchar();

	for (; !isdigit(ch); ch = getchar()) fl = ch == '-';

	for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';

	return fl ? -x : x;

}

const int N = 5010, INF = 0x3f3f3f3f;

int f[N][N], a[N];

signed main() {

	std::ios::sync_with_stdio(false);

	int n = read(), c = read();

	_for(i, 1, n) a[i] = read();

	_for(i, 1, n) {

		int min = 1;

		_for(j, 1, 5000) if (f[i - 1][j] < f[i - 1][min]) min = j;

		_for(j, 1, 5000) f[i][j] =  std::min(f[i - 1][j], f[i - 1][min] + c) + (a[i] - j) * (a[i] - j);

	}

	int ans = INF;

	_for(i, 1, 5000) ans = std::min(ans, f[n][i]);

	std::cout << ans << '\n';

	return 0;

}

树上的链

SYOJ #254

ybw大神的题解

ybw的模拟赛题解.pdf"