博客园同步

原题链接

首先声明: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 题解相关推荐

  1. Apple Catching

    Apple Catching - POJ 2385 - Virtual Judge https://vjudge.net/problem/POJ-2385 题意:有两棵树,每分钟树上会掉下一颗苹果,问 ...

  2. Apple Catching经典dp

    Apple Catching - POJ 2385 - Virtual Judge 状态:第i分钟移动j次能吃多少个苹果 决策:第i分钟动不动 转移:如果移动,dp[i][j]=dp[i-1][j-1 ...

  3. bzoj 3384: [Usaco2004 Nov]Apple Catching 接苹果(DP)

    3384: [Usaco2004 Nov]Apple Catching 接苹果 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 114  Solved: ...

  4. P2690 [USACO04NOV]Apple Catching G

    P2690 [USACO04NOV]Apple Catching G 题目背景 USACO 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为1和2), 每一棵树上都长满了苹果. ...

  5. [DP]Apple Catching G

    [DP]Apple Catching G 题面 题目描述 输入格式 输出格式 样例 解析 题面 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为111和222), 每一棵树上都 ...

  6. POJ 3321 Apple Tree 题解

    POJ 3321 Apple Tree 题解 POJ 3321 题目 There is an apple tree outside of kaka's house. Every autumn, a l ...

  7. P2690 [USACO04NOV]Apple Catching G 题解

    P2690 题目传送门 这道题很明显是一道DP题,我的做法是用一个三维dp数组 其中 dp[i][j][k] 表示 第i分钟站在j苹果树下移动k次接到最多的苹果数量 很显然,对于第i分钟在第j棵树下有 ...

  8. Apple Catching POJ - 2385(基础的动态规划算法)

    题意: 给你两个数字n和m:代表会有n个苹果掉落,m次可以移动的机会:有两棵树,开始你站在树1下面,一分钟只能移动一次,下面的数值代表在哪一颗树下会掉落苹果:问你在可移动的范围内,最多可以接到多少个苹 ...

  9. poj 2382 Apple Catching 入门dp

    点击打开链接 #include <iostream> #include <algorithm> using namespace std; const int M =1010; ...

最新文章

  1. CSS中的emmet语法(使用缩写的方式提高书写html编写速度)
  2. 《动手学深度学习》PyTorch版GitHub资源
  3. 合并远程仓库到本地_Git工作区、暂存区、本地仓库和远程仓库科普
  4. Windows 软RAID 1操作教程
  5. oa提醒模块要素_OA办公系统的选型有哪些要素?OA系统如何给企业带来巨大价值?...
  6. c语言建立栈(顺序栈、双栈和链式栈)
  7. Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
  8. c语言生成随机英文字母,菜鸟求助,写一个随机输出26个英文字母的程序
  9. java怎么判断素数_java判断是否为素数(质数)的方法
  10. linux gpt转mbr命令,linux GPT转mbr
  11. DRILLNET 2.0------第十三章 尾管固井扭矩/摩阻模型
  12. 2019开发者调查报告出炉
  13. 【计算机科学】【2020.05】基于深度学习的计算蛋白质结构预测
  14. android 裁剪屏幕中特定区域内的内容
  15. git reflog 恢复已删除分支
  16. java斜线_Java中的 \ (反斜线)和正则表达式
  17. android APP 跳转到应用商店评分
  18. mysql给所有表添加字段
  19. BGP边界网关路由协议
  20. 什么是Socks5代理?

热门文章

  1. ibm邮箱连接不到服务器,IBM i 安全邮件配置和常见故障排除方法
  2. 加快SP3下载速度并使用第三方系统主题!适用于XP SP3的TCPIP连接数与主题破解增强补丁下载...
  3. iframe嵌套微信公众号文章
  4. 2022-2028全球及中国2-降冰片烯行业研究及十四五规划分析报告
  5. Travis CI 漏洞致数千个开源项目机密泄露
  6. 解决vue项目在ie、360兼容模式下空白页面问题
  7. 这款 SQL自动检查神器,吊炸天的功能,真TMD多!!
  8. 基础知识贴----用好用活N93(完)
  9. iOS开发接入腾讯云通信简略笔记
  10. Oracle的表字段带有双引号,Mybatis报 An identifier or literal is invalid