POJ2385 Apple Catching 题解
博客园同步
原题链接
首先声明:POJ\text{POJ}POJ 数据出错,搞成了“一开始在 111 或 222 棵树都可以”,导致错误。事实上本题解可以通过。
听说还有一维 dp\text{dp}dp 的啊,相当厉害,可我只会三维的。
考虑令 fi,j,1/2f_{i,j,1/2}fi,j,1/2 表示第 iii 分钟,经过 jjj 次移动后站在第 1/21 / 21/2 棵树位置时摘到的最大苹果数。分类讨论:
从 2/1→1/22/1 \rightarrow 1/22/1→1/2,此时答案为 fi−1,j−1,2/1f_{i-1,j-1,2/1}fi−1,j−1,2/1.
保持不动,则此时答案为 fi−1,j,1/2f_{i-1,j,1/2}fi−1,j,1/2.
要注意什么时候可以拿到当前的苹果:因为有些状态是不存在的(就你偶数次移动一定是在 111,奇数次在 222),因此注意移动次数和苹果位置的综合判断。
还有一点,不是移动次数越多,拿到的苹果就越多。如果 ai=1(∀i∈[1,T])a_i = 1(\forall i \in [1,T])ai=1(∀i∈[1,T]),那么一次不动才是最好的,并不是动很多次。
时间复杂度:O(TW)\mathcal{O}(TW)O(TW).
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;const int N=1e3+1;inline int read(){char ch=getchar(); int f=1; while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}int x=0; while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar(); return x*f;}inline void write(int x) {if(x<0) {putchar('-');write(-x);return;}if(x<10) {putchar(char(x%10+'0'));return;}write(x/10);putchar(char(x%10+'0'));
}int T,W,a[N];
int f[N][31][2];int main() {T=read(),W=read();for(int i=1;i<=T;i++) a[i]=read();int ans=0; for(int j=0;j<=W;j++)for(int i=1;i<=T;i++)for(int j=0;j<=W;j++) {f[i][j][1]=max(f[i-1][j-1][2],f[i-1][j][1])+(a[i]==1 && j%2==0);f[i][j][2]=max(f[i-1][j-1][1],f[i-1][j][2])+(a[i]==2 && j%2==1);ans=max(ans,max(f[i][j][1],f[i][j][2]));
// printf("%d %d %d %d\n",i,j,f[i][j][1],f[i][j][2]);} printf("%d\n",ans);return 0;
}
POJ2385 Apple Catching 题解相关推荐
- Apple Catching
Apple Catching - POJ 2385 - Virtual Judge https://vjudge.net/problem/POJ-2385 题意:有两棵树,每分钟树上会掉下一颗苹果,问 ...
- Apple Catching经典dp
Apple Catching - POJ 2385 - Virtual Judge 状态:第i分钟移动j次能吃多少个苹果 决策:第i分钟动不动 转移:如果移动,dp[i][j]=dp[i-1][j-1 ...
- bzoj 3384: [Usaco2004 Nov]Apple Catching 接苹果(DP)
3384: [Usaco2004 Nov]Apple Catching 接苹果 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 114 Solved: ...
- P2690 [USACO04NOV]Apple Catching G
P2690 [USACO04NOV]Apple Catching G 题目背景 USACO 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为1和2), 每一棵树上都长满了苹果. ...
- [DP]Apple Catching G
[DP]Apple Catching G 题面 题目描述 输入格式 输出格式 样例 解析 题面 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为111和222), 每一棵树上都 ...
- POJ 3321 Apple Tree 题解
POJ 3321 Apple Tree 题解 POJ 3321 题目 There is an apple tree outside of kaka's house. Every autumn, a l ...
- P2690 [USACO04NOV]Apple Catching G 题解
P2690 题目传送门 这道题很明显是一道DP题,我的做法是用一个三维dp数组 其中 dp[i][j][k] 表示 第i分钟站在j苹果树下移动k次接到最多的苹果数量 很显然,对于第i分钟在第j棵树下有 ...
- Apple Catching POJ - 2385(基础的动态规划算法)
题意: 给你两个数字n和m:代表会有n个苹果掉落,m次可以移动的机会:有两棵树,开始你站在树1下面,一分钟只能移动一次,下面的数值代表在哪一颗树下会掉落苹果:问你在可移动的范围内,最多可以接到多少个苹 ...
- poj 2382 Apple Catching 入门dp
点击打开链接 #include <iostream> #include <algorithm> using namespace std; const int M =1010; ...
最新文章
- CSS中的emmet语法(使用缩写的方式提高书写html编写速度)
- 《动手学深度学习》PyTorch版GitHub资源
- 合并远程仓库到本地_Git工作区、暂存区、本地仓库和远程仓库科普
- Windows 软RAID 1操作教程
- oa提醒模块要素_OA办公系统的选型有哪些要素?OA系统如何给企业带来巨大价值?...
- c语言建立栈(顺序栈、双栈和链式栈)
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- c语言生成随机英文字母,菜鸟求助,写一个随机输出26个英文字母的程序
- java怎么判断素数_java判断是否为素数(质数)的方法
- linux gpt转mbr命令,linux GPT转mbr
- DRILLNET 2.0------第十三章 尾管固井扭矩/摩阻模型
- 2019开发者调查报告出炉
- 【计算机科学】【2020.05】基于深度学习的计算蛋白质结构预测
- android 裁剪屏幕中特定区域内的内容
- git reflog 恢复已删除分支
- java斜线_Java中的 \ (反斜线)和正则表达式
- android APP 跳转到应用商店评分
- mysql给所有表添加字段
- BGP边界网关路由协议
- 什么是Socks5代理?
热门文章
- ibm邮箱连接不到服务器,IBM i 安全邮件配置和常见故障排除方法
- 加快SP3下载速度并使用第三方系统主题!适用于XP SP3的TCPIP连接数与主题破解增强补丁下载...
- iframe嵌套微信公众号文章
- 2022-2028全球及中国2-降冰片烯行业研究及十四五规划分析报告
- Travis CI 漏洞致数千个开源项目机密泄露
- 解决vue项目在ie、360兼容模式下空白页面问题
- 这款 SQL自动检查神器,吊炸天的功能,真TMD多!!
- 基础知识贴----用好用活N93(完)
- iOS开发接入腾讯云通信简略笔记
- Oracle的表字段带有双引号,Mybatis报 An identifier or literal is invalid