1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <stdio.h> #include <algorithm> using namespace std; int main() { int t, w; scanf("%d %d", &t, &w); int plum[1001] = { 0 }; for (int i = 1; i <= t; i++) scanf("%d", &plum[i]); int dp[1001][31] = { 0 }; for (int i = 1; i <= t; i++) { for (int j = 0; j <= w; j++) { if(j>=1) dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]); else dp[i][j] = dp[i - 1][j]; if ((j % 2 == 0 && plum[i] == 1) || (j % 2 == 1 && plum[i] == 2)) dp[i][j]++; } } int maxPlum = -1; for (int i = 0; i <= w; i++) if (maxPlum < dp[t][i]) maxPlum = dp[t][i]; printf("%d", maxPlum); } | cs |
할만하다!
'알고리즘 > DP' 카테고리의 다른 글
1351 무한 수열 (0) | 2020.02.29 |
---|---|
7579 앱 (0) | 2020.02.28 |
2302 극장 좌석 (0) | 2020.02.28 |
11066 파일합치기 (0) | 2020.02.28 |
11052 카드 구매하기 (0) | 2020.02.27 |