코드 복사/붙여넣기 하는 당신이 아름답습니다.

7976 : 수열

풀이

좋은 풀이는 여기에 있다!

핵심은 이거: dp[i][j] = i번까지의합 % 2가 j인 최소 변환 횟수

코드

#include <stdio.h>
#include <algorithm>
using namespace std;

int N, K;
int cnt[1000001][2], dp[1000001][2];

int main() {
	scanf("%d %d", &N, &K);
	for (int i = 0; i < N; ++i) {
		int a;
		scanf("%d", &a);
		++cnt[i % K + 1][a & 1];
	}
	dp[0][1] = 1e9;
	for (int i = 1; i <= K; ++i) {
		dp[i][0] = min(dp[i - 1][1] + cnt[i][0], dp[i - 1][0] + cnt[i][1]);
		dp[i][1] = min(dp[i - 1][0] + cnt[i][0], dp[i - 1][1] + cnt[i][1]);
	}
	printf("%d", dp[K][0]);

	return 0;
}

아무말

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이

wookje.kwon's profile image

wookje.kwon

2017-02-25 17:57

Read more posts by this author