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;
    }
  • 相关阅读:
    获取app下载链接
    查找文件的路径
    回忆基础:制作plist文件
    Ping++中的AlipaySDK和AlicloudUTDID冲突解决方案
    CocoaPods常用操作命令
    自签名配置HTTPS
    Instruments10 分析某个类中方法的执行时间
    iOS KVC/KVO
    iOS 系统架构及常用框架
    LINQ to SQLite完美解决方案
  • 原文地址:https://www.cnblogs.com/demian/p/7298633.html
Copyright © 2011-2022 走看看