POJ 2385(Apple Catching)

链接:https://vjudge.net/problem/POJ-2385#author=SCU2018

思路:dp题,首先找到状态转移关系,有dp[i][j] = max(dp[i-1][j],dp[i-1][j-1]),如果此时所在位置还有苹果,那么dp[i][j]还需+1,注意最后输出的不一定是dp[t][m],因为可能最大移动步数不需要用完,所以还需要dp[t][k]中寻找最大值。

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

int a[1001];
int dp[1001][31];

int main(){
    memset(dp,0,sizeof(dp));
    int t,m;
    cin>>t>>m;
  for(int i=1;i<=t;i++){
        cin>>a[i];
    }
    for(int i=1;i<=t;i++){
        for(int j=0;j<=m;j++){
            if(j==0)dp[i][j] = dp[i-1][j];
            else
        dp[i][j] = max(dp[i-1][j],dp[i-1][j-1]);
            if(j%2+1==a[i])dp[i][j]++;
    }
    }
    int ans = dp[t][0];
    for(int j=1;j<=m;j++){
        ans = max(ans,dp[t][j]);
    }
    cout<<ans<<endl;
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容