【题目大意】

有两棵树1和2,奶牛Bessie位于树1下,每个单位时间会有一个苹果从其中一棵树掉下来,同时Bessie也可以移动一次,但是Bessie不希望移动超过W次,问T时间内Bessie最多得到多少个苹果。

【思路】

经典的动态规划,预处理时将树1和树2分别用0和1来表示。由于移动偶数次可以回到树1,移动奇数次可以回到树2,移动j次时,若j%2==a[i]就表明当前位置恰好有苹果落下。

设f[i][j]为第i个苹果掉下来的时候,移动至多j次可以得到的最多苹果。f[i][j]由f[i-1][j]和f[i-1][j-1]转移过来,对于f[i-1][j-1]又分为当前移动和不移动两种情形。

如果之前已经跑了j次,不动的情况下苹果恰好又掉下来就加一,f[i-1][j]+(j%2==a[i]);

如果之前已经跑了j-1次,再跑动一次,此时恰好苹果掉下来就加一,f[i-1][j-1]+(j%2==a[i]);

果之前已经跑了j-1次,这次不跑动,此时恰好苹果掉了下来就加一,f[i-1][j-1]+((j-1)%2==a[i])。

以上三种情况就可组成状态转移方程。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int MAXNt=+;
const int MAXNw=+;
int t,w;
int a[MAXNt];
int f[MAXNt][MAXNw];
/*f[i][j]表示第i个苹果掉下来,且跑动了j次的时候能够抓到的最多苹果数*/ int main()
{
scanf("%d%d",&t,&w); memset(f,,sizeof(f));
f[][]=;
/*第零个苹果掉落下来的时候,移动零次最多得到零个苹果*/
for (int i=;i<=t;i++)
{
scanf("%d",&a[i]);
f[i][]=f[i-][]+(a[i]==);
/*如果当前站在第一棵树的下面,那么不动的情况下可以多抓到一个苹果*/
a[i]--;
/*将站爱第一棵树下的设为0,站在第二课树下的设为1*/
} for (int i=;i<=t;i++)
for (int j=;j<=w;j++)
{
f[i][j]=max(f[i][j],f[i-][j]+(j%==a[i]));
/*如果之前已经跑了j次,不动的情况下苹果恰好又掉下来,则加1*/
f[i][j]=max(f[i][j],f[i-][j-]+(j%==a[i]));
/*如果之前已经跑了j-1次,再跑动一次,此时恰好苹果掉下来,则加1*/
f[i][j]=max(f[i][j],f[i-][j-]+((j-)%==a[i]));
/*如果之前已经跑了j-1次,这次不跑动,此时恰好苹果掉了下来,则加1*/
}
cout<<f[t][w]<<endl;
return ;
}

【动态规划】POJ2385-Apple Catching的更多相关文章

  1. POJ2385——Apple Catching

                                                $Apple~Catching$ Time Limit: 1000MS   Memory Limit: 6553 ...

  2. poj2385 Apple Catching (线性dp)

    题目传送门 Apple Catching Apple Catching Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 154 ...

  3. poj2385 - Apple Catching【动态规划】

    Description It is a little known fact that cows love apples. Farmer John has two apple trees (which ...

  4. poj2385 Apple Catching(dp状态转移方程推导)

    https://vjudge.net/problem/POJ-2385 猛刷简单dp的第一天的第一题. 状态:dp[i][j]表示第i秒移动j次所得的最大苹果数.关键要想到移动j次,根据j的奇偶判断人 ...

  5. poj2385 Apple Catching

    思路: 简单dp. 实现: #include <iostream> #include <cstdio> #include <cstring> using names ...

  6. 【POJ - 2385】Apple Catching(动态规划)

    Apple Catching 直接翻译了 Descriptions 有两棵APP树,编号为1,2.每一秒,这两棵APP树中的其中一棵会掉一个APP.每一秒,你可以选择在当前APP树下接APP,或者迅速 ...

  7. Apple Catching(POJ 2385)

    Apple Catching Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9978   Accepted: 4839 De ...

  8. Apple Catching(dp)

    Apple Catching Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9831   Accepted: 4779 De ...

  9. BZOJ 3384: [Usaco2004 Nov]Apple Catching 接苹果( dp )

    dp dp( x , k ) = max( dp( x - 1 , k - 1 ) + *** , dp( x - 1 , k ) + *** ) *** = 0 or 1 ,根据情况 (BZOJ 1 ...

  10. 3384/1750: [Usaco2004 Nov]Apple Catching 接苹果

    3384/1750: [Usaco2004 Nov]Apple Catching 接苹果 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 18  Solv ...

随机推荐

  1. Gulp、Grunt构建工具

    在Gulp中创建一个库从磁盘gulp.src读取源文件并通过磁盘管道写回内容到gulp.dest,可以理解成只是将文件复制到另一个目录. var gulp = require('gulp'); gul ...

  2. 小程序_RSA加密功能

    这是开发的第三个小程序,基于一个物流系统,简化功能开发下单流程.登录的时候,系统是使用RSA进行加解密的. 流程:第一个接口获取到后端传过来的密匙共钥(publicKey),通过公钥使用RSA加密密码 ...

  3. C后端设计开发 - 第5章-内功-数据结构下卷

    正文 第5章-内功-数据结构下卷 后记 如果有错误, 欢迎指正. 有好的补充, 和疑问欢迎交流, 一块提高. 在此谢谢大家了.

  4. [New learn] 设计模式思考

    本文是对上文[New learn] 设计模式的思考总结 1.大框架 无论应用使用多少种设计模式和技巧,此模式都是应用的大框架.下图为本项目的基本架构图: 1.上图中大框架为经典的MVC模式. 2.Co ...

  5. CentOS安装按进程实时统计流量情况工具NetHogs笔记

    CentOS安装按进程实时统计流量情况工具NetHogs笔记 一.概述 NetHogs是一款开源.免费的,终端下的网络流量监控工具,它可监控Linux的进程或应用程序的网络流量.NetHogs只能实时 ...

  6. Shell——Linux/Mac 终端复制文件内容到剪切板

    pbcopy < filename 如: pbcopy < README.md 效果如下: 说明:上图中  # gitskills   即README.md 中内容.

  7. FineReport——JS二次开发(自定义翻页按钮)

    FR允许自定义工具栏上面的按钮,并提交JS方法: 对于翻页功能,大概有首页,下一页,上一页,最后一页,以及跳转页等功能. 不得不说的是,在HTML页面自定义的按钮如何获取到报表模板,通过FR提供的JS ...

  8. Redis -- 数据类型小结

    redis key 的命名规则: 对象类型:对象id:对象属性  (hset car:1: price 500.hset car:1: name:tom) 一.redis 数据类型: 1. 字符串类型 ...

  9. JWT认证不通过导致不能访问视图的解决方案

    在做商城项目的购物车模块时,发现了一个问题. 需求:当用户登录时,添加商品到购物车的数据保存在redis.当用户未登录时,添加商品到购物车的数据保存在cookies.两个功能都写在一个视图里面.以JW ...

  10. linux命令(43):cal命令

    cal命令可以用来显示公历(阳历)日历.公历是现在国际通用的历法,又称格列历,通称阳历.“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”. 1.命令格式: cal  ...