zoukankan      html  css  js  c++  java
  • POJ 2385 Apple Catching【DP】

    题意:2棵苹果树在T分钟内每分钟随机由某一棵苹果树掉下一个苹果,奶牛站在树#1下等着吃苹果,它最多愿意移动W次,问它最多能吃到几个苹果。
    思路:不妨按时间来思考,一给定时刻i,转移次数已知为j, 则它只能由两个状态转移而来。
    即上一时刻同一棵树或上一时刻不同的树
        dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]);
    则这一时刻在转移次数为j的情况下最多能接到的苹果为那两个状态的最大值再加上当前能接受到的苹果。(注意当前能否拿到苹果只与转移次数有关)
        if (j % 2 + 1 == apple[i])dp[i][j]++;

    #include <iostream>
    #include <cstdio>
    #include <queue>
    #include <math.h>
    #include <string.h>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    int dp[1001][31];
    int apple[1001];
    int main()
    {
        int t,w;
        scanf("%d%d", &t,&w);
        memset(dp, 0, sizeof(dp));
        for(int i=1;i<=t;i++)
            scanf("%d",apple+i);
        for(int i=1;i<=t;i++)
            for(int j=0;j<=w;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==apple[i])dp[i][j]++;
            }
        int ans=0;
        for(int i=1;i<=t;i++)
            for(int j=0;j<=w;j++)
                ans=max(ans,dp[i][j]);
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    我心飞翔
    又见草堂
    有一种爱只能用心去珍藏《转贴》
    人事管理制度(爆笑)
    廊桥放歌
    记住: 惰性,职业生涯的无形杀手
    职场“三无人员”如何突破自己
    升职“流产”,都是谦虚惹的祸(转)
    李嘉诚让员工忠诚的简单办法
    尤未尽意
  • 原文地址:https://www.cnblogs.com/demian/p/7298633.html
Copyright © 2011-2022 走看看