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 ...
随机推荐
- 学习使用CGI和HTML
目标和需求: (1)通过网页查询并设置开发板的网络参数,要求至少可查询IP地址.子网掩码.网关.MAC地址,可设置自动获取IP或固定IP,设置包括查询的内容 (2)使用CGI编程+HTML实现简单数据 ...
- awk结合数组统计
1.统计用户登录类型 #!/bin/bashdeclare -A shells (定义关联数组shells)while read ll (读取/etc/passwd,ll为变量) dotype= ...
- 初学node.js-nodejs中实现用户登录路由
经过前面几次的学习,已经可以做下小功能,今天要实现的事用户登录路由. 一.users_model.js 功能:定义用户对象模型 var mongoose=require('mongoose'), S ...
- ubuntu server安装的一些坑
[没有root用户] ubuntu server安装的时候要你新建一个用户,安装完成后,你需要手动开启root. $ sudo passwd root 输入你当前用户的密码 输入你希望的root用户的 ...
- window环境rabbitMQ安装和php扩展安装
下面的安装步骤,已经在2018-11-27试验通过. 1.安装前的准备 phpinfo查看php的版本.系统是多少位的,php版本是否是线程安全,php.ini文件的路径 2.安装rabbitMQ 安 ...
- Java——HashMap使用Demo
package map; import java.util.Collection; import java.util.HashMap; import java.util.Set; public cla ...
- PHP排序函数sort、rsort、asort、arsort、ksort、krsort
1.sort函数用于对数组元素值从低到高排序,去除原始索引元素,重新生成0,1,2..的键2.rsort函数用于对数组元素值从高到低排序,去除原始索引元素,重新生成0,1,2..的键3.asort函数 ...
- 思维体操: HDU1287破译密码
破译密码 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- es6中let实例应用之一
有如下情景 html部分: <button class="btn">按钮1</button> <button class="btn" ...
- web.xml文件头声明各个版本参考
Servlet 3.1 Java EE 7 XML schema, namespace is http://xmlns.jcp.org/xml/ns/javaee/ <web-app xmlns ...