【动态规划】POJ2385-Apple Catching
【题目大意】
有两棵树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的更多相关文章
- POJ2385——Apple Catching
$Apple~Catching$ Time Limit: 1000MS Memory Limit: 6553 ...
- poj2385 Apple Catching (线性dp)
题目传送门 Apple Catching Apple Catching Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 154 ...
- poj2385 - Apple Catching【动态规划】
Description It is a little known fact that cows love apples. Farmer John has two apple trees (which ...
- poj2385 Apple Catching(dp状态转移方程推导)
https://vjudge.net/problem/POJ-2385 猛刷简单dp的第一天的第一题. 状态:dp[i][j]表示第i秒移动j次所得的最大苹果数.关键要想到移动j次,根据j的奇偶判断人 ...
- poj2385 Apple Catching
思路: 简单dp. 实现: #include <iostream> #include <cstdio> #include <cstring> using names ...
- 【POJ - 2385】Apple Catching(动态规划)
Apple Catching 直接翻译了 Descriptions 有两棵APP树,编号为1,2.每一秒,这两棵APP树中的其中一棵会掉一个APP.每一秒,你可以选择在当前APP树下接APP,或者迅速 ...
- Apple Catching(POJ 2385)
Apple Catching Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9978 Accepted: 4839 De ...
- Apple Catching(dp)
Apple Catching Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9831 Accepted: 4779 De ...
- 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 ...
- 3384/1750: [Usaco2004 Nov]Apple Catching 接苹果
3384/1750: [Usaco2004 Nov]Apple Catching 接苹果 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 18 Solv ...
随机推荐
- CursorFileManager对cursor文件的读写
public class CursorFileManager implements CursorManager{public void write(String key, LongCursor cur ...
- devinet_ioctl
Kernel: 4.12.6 deinet_ioctl:获取或者设置接口的地址,掩码,标记等信息: 注意,使用SIOCSIFFLAGS关闭设备,如果使用了别名,则删除对应ip,如果其为主ip,并且从i ...
- handle_level_irq 与handle_edge_irq 的区别【转】
转自:http://blog.csdn.net/xavierxiao/article/details/6087277 版权声明:本文为博主原创文章,未经博主允许不得转载. Linux 里, handl ...
- problems when installed mysql in linux ubuntu
reference:http://www.jb51.net/article/87160.htm?pc 1.ERROR 2002 (HY000): Can't connect to local MySQ ...
- iOS APP程序启动原理
UIApplication 程序启动原理 一个应用程序运行就必须要有一个进程,一个进程至少要有一个线程,我们把这个线程叫做主线程,主线程开启之后会开启一个主运行循环,如果不开启一个运行循环,程序开启了 ...
- strtok的用法(文件操作)
strtok :在一个字符串查找下一个符号 char *strtok( char *strToken, const char *strDelimit ); 返回值:返回指向在strToken字符串找到 ...
- Nginx-1.6.3反向代理
源码安装nginx cat /etc/redhat-release uname -rm yum install pcre-devel openssl-devel -y rpm -qa pcre pcr ...
- 从一个R语言案例学线性回归
线性回归简介 如下图所示,如果把自变量(也叫independent variable)和因变量(也叫dependent variable)画在二维坐标上,则每条记录对应一个点.线性回规最常见的应用场景 ...
- 17:django Email
我自己在看这一节之前自己先实现了一下,django-admin.py startproject testEmail新建一个新项目,urls.py把urlpatterns的第一行取消注释,改成url(r ...
- jQuery实现,动态自动定位弹窗。JS分页,Ajax请求
工作中碰到一个问题,一个页面中碰到多个地方需要弹窗数据. 网上找了一圈,没有找到合适的,所以自己写了一个. 兼容IE7+,chrome.其它未测试. 需求:点击任意的输入框(也可其它元素,代码中有注释 ...