#include <iostream>
#include <algorithm>
using namespace std;
const int M =1010;
int dp[M][35]; // dp[i][j] 在i秒内swap j次最多获得的苹果
// 第i秒有两种 决策 要么swap要么停留在原地
//dp[i][j]= max(dp[i-1][j-1],dp[i-1][j])
int main()
{
int t,w,i,j,tree[M];
cin>>t>>w;
for(i=1;i<=t;i++)
{
cin>>tree[i]; // tree[i] 第i秒时那个tree掉apple
}
for(i=0;i<=w;i++)
{
dp[0][i]=0; // 0秒不管swap几次都没apple
}
for(i=1;i<=t;i++)
{
for(j=0;j<=w;j++)
{
if(j>0)
dp[i][j]=max(dp[i-1][j-1],dp[i-1][j]);
else
dp[i][j]=dp[i-1][j];
if(j%2+1==tree[i]) //开始在tree:1 交换j次后在tree?
{
dp[i][j]++;
}
}
}
int ans=-1;
for(j=0;j<=w;j++)
{
ans=max(ans,dp[t][j]);
}
cout<<ans<<endl;
return 0;
}
poj 2382 Apple Catching 入门dp
最新推荐文章于 2019-09-28 09:32:26 发布