답안 #238068

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
238068 2020-06-09T21:28:27 Z luciocf K개의 묶음 (IZhO14_blocks) C++14
0 / 100
10 ms 4736 KB
#include <bits/stdc++.h>

#define ff first
#define ss second

using namespace std;

typedef pair<int, int> pii;

const int maxn = 1e5+10;
const int maxk = 110;
const int inf = 1e9+10;

int n, k;
int a[maxn];

int mn[maxk];

int dp[maxn][maxk];

stack<pii> stk[maxk];

int main(void)
{
	scanf("%d %d", &n, &k);

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

	for (int i = 1; i <= k; i++)
		mn[i] = inf;

	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= min(k, i); j++)
		{
			while (stk[j].size() && stk[j].top().ff <= a[i])
			{
				mn[j] = min(mn[j], dp[stk[j].top().ss][j-1]);
				stk[j].pop();
			}

			stk[j].push({a[i], i});
			mn[j] = min(mn[j], dp[i-1][j-1]);

			if (a[i] <= a[i-1]) dp[i][j] = min(a[i]+mn[j], dp[i-1][j]);
			else dp[i][j] = a[i]+mn[j];
		}
	}

	printf("%d\n", dp[n][k]);
}

Compilation message

blocks.cpp: In function 'int main()':
blocks.cpp:25:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &k);
  ~~~~~^~~~~~~~~~~~~~~~~
blocks.cpp:28:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &a[i]);
   ~~~~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Incorrect 5 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Incorrect 5 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 10 ms 4736 KB Output isn't correct
2 Halted 0 ms 0 KB -