• POJ 2385 Apple Catching (DP)


    题意:牛Bessie可以在两棵苹果树之间来回走,在连续的一段时间内,每分钟都从两棵树之间掉苹果,但同一分钟只有一棵树掉,Bessie一分钟只能在一棵树下接苹果,问在规定的步数之内,Bessie最多可以吃掉多少苹果。

    思路:此题用动态规划思想考虑,在第m次移动后,在t分钟所获得的苹果是根据第m-1次移动第t-1分钟 和 第m次移动第t-1分钟决定的。记f[m][t]为第m次移动t分钟时所获得的最大的数量,那么会有如下公式:

      f[m][t] = max{f[m-1][t-1],f[m][t-1]}+x,x是这时Bessie所在的棵树的那个时间的苹果,如果有,那么x=1,否则为0。

    #include <iostream>
    #include
    <cstdio>
    #include
    <memory.h>
    #include
    <algorithm>
    using namespace std;#define MAXN 10000int main()
    {
    int m,n,i,j,f[50][MAXN],arr[MAXN],tmp;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
    for(i = 1; i <= n; ++i)
    scanf(
    "%d",&arr[i]);
    memset(f,
    0,sizeof(f));
    for(i = 1; i <= m+1; ++i)
    {
    for(j = 1; j <= n; ++j)
    {
    tmp
    = f[i-1][j-1]>f[i][j-1]?
    f[i
    -1][j-1]:f[i][j-1];
    if(i&1)
    f[i][j]
    = tmp+(arr[j]&1);
    else
    f[i][j]
    = tmp+((arr[j]&1)^1);
    }
    }
    printf(
    "%d\n",f[m+1][n]>f[m][n]?f[m+1][n]:f[m][n]);
    }
    return 0;
    }
  • 相关阅读:
    第1课 Git、谁与争锋
    程序员最真实的10个瞬间
    程序员最真实的10个瞬间
    一文读懂前端缓存
    一文读懂前端缓存
    一文读懂前端缓存
    EF使用CodeFirst创建数据库和表
    EF使用CodeFirst创建数据库和表
    EF使用CodeFirst创建数据库和表
    ASP.NET MVC的过滤器笔记
  • 原文地址:https://www.cnblogs.com/lvpengms/p/1686554.html
Copyright © 2020-2023  润新知