刷題——Apple Catching POJ - 2385

/*
dp[i][j]爲i時間,j次變換下所能得到的最大果實數
位置從1號樹開始,所以j爲偶數時在樹1處
若在i時刻,果實在所在樹上掉落
則dp[i][j]=dp[i-1][j]在上一時刻同一變換下所得的最大最大果實數+1
若不是,則dp[i][j]=max(dp[i][j-1],dp[i-1][j])所能得到的最大果實
應爲上一時刻同一變換所得的最大果實數,或改前一次變換所得的最大果實數
*/
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int dp[1005][35];
int tree[1005];
int main(){
    int t,w;
    while(~scanf("%d %d",&t,&w)){
        for(int i=1;i<=t;i++){
            scanf("%d",&tree[i]);
        }
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=t;i++){
            for(int j=0;j<=w;j++){
                if((tree[i]&1)!=(j&1)){
                    dp[i][j]=dp[i-1][j]+1;
                }
                else{
                    dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
                }
            }
        }
        int maxx=0;
        for(int i=1;i<=w;i++){
            maxx=max(maxx,dp[t][i]);
        }
        printf("%d\n",maxx);
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章