BOJ 2240 : 자두나무
2020. 6. 1. 01:28ㆍPS/DP
이 문제는 DP로 해결할 수 있다.
dp[i][j][k] = i초에 j번 움직이고 k번 나무에 있을 때 최적해
로 두고 풀면 된다.
#include <bits/stdc++.h>
#define sanic ios_base::sync_with_stdio(0);
#define MEM 1002
#define f first
#define s second
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
const ll MOD = 1e9+7;
ll t,n,m,ans;
ll dp[MEM][MEM][3];
ll ja[MEM];
main()
{
sanic; cin.tie(0);
cin >> n >> m;
for(int i=1; i<=n; i++)
cin >> ja[i];
for(int i=1; i<=n; i++){
dp[i][0][1] = dp[i-1][0][1] + (ja[i]==1);
for(int j=1; j<=m; j++){
if(i<j) continue;
dp[i][j][1] = max(dp[i-1][j-1][2], dp[i-1][j][1]) + (ja[i]==1);
dp[i][j][2] = max(dp[i-1][j-1][1], dp[i-1][j][2]) + (ja[i]==2);
ans = max(ans, max(dp[i][j][1], dp[i][j][2]));
}
}
cout << ans;
}
'PS > DP' 카테고리의 다른 글
BOJ 14728 : 벼락치기 (0) | 2021.01.10 |
---|---|
BOJ 2688 : 줄어들지 않아 (0) | 2020.08.17 |
BOJ 17623 : 괄호 (0) | 2020.08.17 |
BOJ 3056 : 007 (0) | 2020.08.13 |
BOJ 18244 : 변형 계단 수 (0) | 2020.05.29 |