简单dp。
dp[i][j]表示在第i分钟,走了第j步后所得的苹果数。
因此dp[i][j]取决于dp[i-1][j-1]和dp[i-1][j],以及所在的树上是否掉落苹果。
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXT = 1000;
const int MAXW = 30;
int dp[MAXT+2][MAXW+2];
int main()
{
int t, w;
scanf("%d%d", &t, &w);
for (int i = 1; i <= t; i++) {
int tree;
scanf("%d", &tree);
for (int j = 0; j <= i; j++) {
if (j == 0)
dp[i][j] = dp[i-1][j];
else if (j >= 1) {
dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]);
}
if (j % 2 + 1 == tree) {
dp[i][j]++;
}
}
}
int ans = 0;
for (int i = 0; i <= w; i++) {
ans = max(ans, dp[t][i]);
}
printf("%d\n", ans);
return 0;
}