#include <cstdio>
#include <iostream>
#include <string.h>
#define MAXN 1000
using namespace std;
int t,w;
int dp[MAXN][MAXN];
int arr[MAXN];
int main()
{
memset(dp,0,sizeof(dp));
scanf("%d%d",&t,&w);
for(int i = 1;i <= t;i++)
scanf("%d",&arr[i]);
arr[0] = 1;
//初始化,开始在第一颗树下
if (arr[1] == 1) {
dp[1][0] = 1;
dp[1][1] = 0;
}
if (arr[1] == 2) {
dp[1][1] = 1;
dp[1][0] = 0;
}
for(int i = 2;i <= t;i++){
for(int j = 0;j <= w; j++){
//没有来回次数 在1树下接平苹果
if(j == 0){
dp[i][j] = dp[i-1][j] + arr[i] % 2;
continue;
}
dp[i][j] = max(dp[i-1][j],dp[i-1][j-1]);
//在本颗树下 (j==0 对应在 1 树下 j==1 在 2 树下)
if (j % 2 + 1 == arr[i]){
dp[i][j]++;
}
}
}
int ans = dp[t][0];
for(int i = 0;i <= w;i++){
ans = max(ans,dp[t][i]);
}
printf("%d\n",ans);
return 0;
}
poj 2385
最新推荐文章于 2019-07-13 11:51:00 发布