POJ 2385 Apple Catching ( 经典DP )
题意 : 有两颗苹果树,在 1~T 的时间内会有两颗中的其中一颗落下一颗苹果,一头奶牛想要获取最多的苹果,但是它能够在树间转移的次数为 W 且奶牛一开始是在第一颗树下,请编程算出最多的奶牛获得的苹果数
分析 : 这题是不可能爆搜的,可组合的情况实在太多.......
定义 dp[ i ][ j ] ==> 在第 i 个时间点下已经转移了 j 次的最多苹果数是多少
根据定义和奶牛一开始在一号树这个条件,所以初始化时有两种情况
如果第一个时间点落下苹果的是一号树则初始化 dp[ 1 ][ 0 ] = 1、dp[ 1 ][ 1 ] = 0
否则的话就是 dp[ 1 ][ 0 ] = 0、dp[ 1 ][ 1 ] = 1
那么对于一个状态 dp[ i ][ j ] 而言,它能从什么状态转移而来?
其实能从前一个时刻是否选择转到or继续待在当前所处的这颗树
即 dp[ i ][ j ] = max( dp[ i-1 ][ j ] , dp[ i-1 ][ j-1 ] )
然后根据当前时间点哪颗树掉落了苹果决定是否给当前 dp[ i ][ j ] 进行+1操作( j 的奇偶决定了牛在哪颗树 )
其实如果爆搜的话可以根据每一次选or不选去另一颗树的方法来搜,最后会搜出一个二叉的递归树
而上述DP就是记录了搜索出来的搜索树节点的最优值,我是这样理解的.......
#include<bits/stdc++.h> using namespace std; ; ]; int arr[maxn]; int main(void) { int T, W; while(~scanf("%d %d", &T, &W)){ ; i<=T; i++) scanf("%d", &arr[i]); ] == ){ dp[][] = ; dp[][] = ; }else{ dp[][] = ; dp[][] = ; } ; ; i<=T; i++){ ; j<=W; j++){ ) continue; /// 最多转 i - 1 次,所以 j 超过了则说明不合法了 ) dp[i][j] = dp[i-][j] + (arr[i]==); else{ dp[i][j] = max(dp[i-][j], dp[i-][j-]); && (j&)) dp[i][j]++; && !(j&)) dp[i][j]++; } if(i==T) ans = max(dp[i][j], ans); } } printf("%d\n", ans); } ; }
POJ 2385 Apple Catching ( 经典DP )的更多相关文章
- poj 2385 Apple Catching 基础dp
Apple Catching Description It is a little known fact that cows love apples. Farmer John has two ap ...
- POJ 2385 Apple Catching【DP】
题意:2棵苹果树在T分钟内每分钟随机由某一棵苹果树掉下一个苹果,奶牛站在树#1下等着吃苹果,它最多愿意移动W次,问它最多能吃到几个苹果.思路:不妨按时间来思考,一给定时刻i,转移次数已知为j, 则它只 ...
- POJ - 2385 Apple Catching (dp)
题意:有两棵树,标号为1和2,在Tmin内,每分钟都会有一个苹果从其中一棵树上落下,问最多移动M次的情况下(该人可瞬间移动),最多能吃到多少苹果.假设该人一开始在标号为1的树下. 分析: 1.dp[x ...
- 【POJ】2385 Apple Catching(dp)
Apple Catching Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13447 Accepted: 6549 D ...
- poj 2385 Apple Catching(dp)
Description It and ) in his field, each full of apples. Bessie cannot reach the apples when they are ...
- poj 2385 Apple Catching(记录结果再利用的动态规划)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 有两颗苹果树,在每一时刻只有其中一棵苹果树会掉苹果,而Bessie可以在很短的时 ...
- POJ 2385 Apple Catching
比起之前一直在刷的背包题,这道题可以算是最纯粹的dp了,写下简单题解. 题意是说cows在1树和2树下来回移动取苹果,有移动次数限制,问最后能拿到的最多苹果数,含有最优子结构性质,大致的状态转移也不难 ...
- POJ 2385 Apple Catching(01背包)
01背包的基础上增加一个维度表示当前在的树的哪一边. #include<cstdio> #include<iostream> #include<string> #i ...
- POJ:2385-Apple Catching(dp经典题)
Apple Catching Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14311 Accepted: 7000 Descr ...
随机推荐
- centos7安装java JDK
Java环境 1.下载jdk(用FileZilla或xshell工具连接服务器后上传到需要安装的目录) 在 /opt/deploy 下新建 java 文件夹: # mkdir / opt/deploy ...
- RPM包或源码包
安装RPM包或源码包 点击vmware右下角光驱连接. 安装rpm包 -i:表示安装 -v:表示可视化 -h:表示显示安装进度 (同时使用) --force:表示强制安装,即使覆盖属于其他包的文件也要 ...
- 自己写一个Layout
1 Layout是ViewGroup的子类 LinearLayout.FrameLayout都是ViewGroup的子类,自己写的Layout也是ViewGroup的子类. 2 步骤 第一,自己的La ...
- maven中央仓库太慢的解决办法
在.m2目录下创建settings.xml文件,文件内容如下: <?xml version="1.0" encoding="UTF-8"?> < ...
- jmeter正则提取器提取指定位置的字符串
1.需求:提取登录后的凭证ticket供系统其他接口调用 2.登录接口返回的格式如下: { "ret_code":0, "ret_msg":"logi ...
- 小白学Python——用 百度翻译API 实现 翻译功能
本人英语不好,很多词组不认识,只能借助工具:百度翻译和谷歌翻译都不错,近期自学Python,就想能否自己设计一个百度翻译软件呢? 百度翻译开放平台: http://api.fanyi.baidu.co ...
- Java创建二叉树
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/yeweiouyang/article/details/37814461 二叉树的值保存在数组中,以0 ...
- 2、Java调用C语言(JNative法)
这个方法也是挺麻烦的…… 一.下载JNative.jar,把它放在你jdk下的\jre\lib\ext目录下 二.在 F:\MinGW\JNative 新建 Test.java: public cla ...
- k3 cloud提示超出产品激活有效期
k3 cloud提示超出产品激活有效期,请联系系统管理员登录管理中心进行产品激活(激活路径:许可中心-许可管理-产品激活) 首先进入管理中心:一次点击许可中心-产品激活 复制激活串号并点击金蝶正版验证 ...
- 简单的物流项目实战,WPF的MVVM设计模式(四)
接下来写ViewModels 创建运单的ViewModel类 public class CreateExpressWindowViewModel: NotificationObject { priva ...