poj2385

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1005;
int f[1005][31];
int a[maxn][3];

int main()
{
    int n,k,b;
    scanf("%d%d",&n,&k);
    memset(a,0,sizeof(a));

    for(int i=1;i<=n;i++)
    {
        scanf("%d",&b);
        a[i][b]=1; //第i分钟编号为b的苹果树掉下苹果
    }
    memset(f,0,sizeof(f));
    f[1][0]=a[1][1];

    for(int i=1;i<=n;i++)
        for(int j=0;j<=k;j++)
    {
        f[i][j]=f[i-1][j]+a[i][j%2+1]; //第i分钟不移动,总共移动了j次
        if(j>0)
         f[i][j]=max(f[i][j],f[i-1][j-1]+a[i][j%2+1]); //移动,总共移动了j次
    }
    int ans=0;

    for(int j=1;j<=k;j++)
        ans=max(ans,f[n][j]);
    printf("%d\n",ans);

    return 0;
}
//f[i][j]表示前i分钟移动了j次所获的苹果数

猜你喜欢

转载自blog.csdn.net/zizahn/article/details/53178142