poj 2385
2棵苹果树在T分钟内随机由某一棵苹果树掉下一个苹果,奶牛站在树#1下等着吃苹果,它最多愿意移动W次,问它最多能吃到几个苹果。
a[i][j] 表示在第j棵树下,前i秒的苹果和
dp[i][j]表示第i秒活动j次可吃到的苹果数
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int t,aa,w,dp[1005][31],a[1005][2];
int main()
{
scanf("%d%d",&t,&w);
for(int i = 1; i <= t; ++i)
{
scanf("%d",&aa);
if(aa == 1) a[i][0] = 1;
else a[i][1] = 1;
}
for(int i = 1; i <= t; ++i)
for(int j = 0; j <= w; ++j)
if(j % 2)
{
dp[i][j] = dp[i - 1][j] + a[i][1];
if(j >= 1) dp[i][j] = max(dp[i][j],dp[i - 1][j - 1] + a[i][0]);
}
else
{
dp[i][j] = dp[i - 1][j] + a[i][0];
if(j >= 1) dp[i][j] = max(dp[i][j],dp[i - 1][j - 1] + a[i][1]);
}
printf("%d",dp[t][w]);
return 0;
}