Submission #159548

#TimeUsernameProblemLanguageResultExecution timeMemory
159548DrSwadK blocks (IZhO14_blocks)C++17
0 / 100
51 ms42212 KiB
#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 10;
const int K = 105;
const int INF = 1e9;

int n, k;
int a[N];
int l[N];
int dp[N][K];

int main() {
	// freopen("in", "r", stdin);
	// freopen("out", "w", stdout);

	cin >> n >> k;
	for (int i = 1; i <= n; i++) scanf("%d", &a[i]);

	for (int i = 2; i <= n; i++) {
		int at = i - 1;
		while (at > 0 && a[at] < a[i]) at = l[at];
		l[i] = at;
	}

	fill(&dp[0][0], &dp[N][0], INF);
	dp[0][0] = 0;

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= k; j++) {
			dp[i][j] = min(a[i] + dp[min(max(l[i], j - 1), i - 1)][j - 1], dp[l[i]][j]);
		}
	}

	cout << dp[n][k] << endl;

	return 0;
}

Compilation message (stderr)

blocks.cpp: In function 'int main()':
blocks.cpp:19:36: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
                               ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...