题意:有两棵树,标号为1和2,在Tmin内,每分钟都会有一个苹果从其中一棵树上落下,问最多移动M次的情况下(该人可瞬间移动),最多能吃到多少苹果。假设该人一开始在标号为1的树下。

分析:

1、dp[x][y][z]---第x分钟移动了y次的情况下,现在位于标号为z的树下最多吃到的苹果数。

2、枚举所有的时间、次数和可能位于的树下。

若第i分钟该人位于标号为k的树下,第i + 1分钟苹果从标号为a[i+1]的树上落下。

(1)k==a[i],

此人站在标号为k的树下不移动,即可再吃到一个苹果:dp[i + 1][j][k] = max(dp[i + 1][j][k], dp[i][j][k] + 1);

此人多方面权衡后选择移动到另一棵树下,则移动但吃不到苹果:dp[i + 1][j + 1][Move(k)] = max(dp[i + 1][j + 1][Move(k)], dp[i][j][k]);

(2)k!=a[i],

此人移动到另一棵树下,即可再吃到一个苹果:dp[i + 1][j + 1][Move(k)] = max(dp[i + 1][j + 1][Move(k)], dp[i][j][k] + 1);

此人多方面权衡后选择不移动,因此吃不到苹果:dp[i + 1][j][k] = max(dp[i + 1][j][k], dp[i][j][k]);

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<deque>
#include<queue>
#include<list>
#define lowbit(x) (x & (-x))
const double eps = 1e-8;
inline int dcmp(double a, double b){if(fabs(a - b) < eps) return 0;return a > b ? 1 : -1;
}
typedef long long LL;
typedef unsigned long long ULL;
const int INT_INF = 0x3f3f3f3f;
const int INT_M_INF = 0x7f7f7f7f;
const LL LL_INF = 0x3f3f3f3f3f3f3f3f;
const LL LL_M_INF = 0x7f7f7f7f7f7f7f7f;
const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
const int MOD = 1e9 + 7;
const double pi = acos(-1.0);
const int MAXN = 1000 + 10;
const int MAXT = 10000 + 10;
using namespace std;
int dp[MAXN][35][3];
int a[MAXN];
int Move(int k){return k == 1 ? 2 : 1;
}
int main(){int T, W;scanf("%d%d", &T, &W);for(int i = 1; i <= T; ++i){scanf("%d", &a[i]);}if(a[1] == 1){dp[1][0][1] = 1;}else{dp[1][1][2] = 1;}for(int i = 1; i <= T - 1; ++i){for(int j = 0; j <= W; ++j){for(int k = 1; k <= 2; ++k){if(k == a[i + 1]){dp[i + 1][j][k] = max(dp[i + 1][j][k], dp[i][j][k] + 1);dp[i + 1][j + 1][Move(k)] = max(dp[i + 1][j + 1][Move(k)], dp[i][j][k]);}else{dp[i + 1][j + 1][Move(k)] = max(dp[i + 1][j + 1][Move(k)], dp[i][j][k] + 1);dp[i + 1][j][k] = max(dp[i + 1][j][k], dp[i][j][k]);}}}}int ans = 0;for(int i = 0; i <= W; ++i){for(int j = 1; j <= 2; ++j){ans = max(ans, dp[T][i][j]);}}printf("%d\n", ans);return 0;
}

  

转载于:https://www.cnblogs.com/tyty-Somnuspoppy/p/6632914.html

POJ - 2385 Apple Catching (dp)相关推荐

  1. poj 2382 Apple Catching 入门dp

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

  2. POJ 2385 Apple Catching

    题目链接 题意 一共有两个苹果树,每个树会落下苹果,一共会掉下T个苹果,Bessie最初在第一棵树,一共可以移动W次,最多可以接到几个苹果 AC dp dp[ i ][ j ]表示第 i 个苹果在移动 ...

  3. POJ 3280 Cheapest Palindrome(DP)

    题目链接 题意 :给你一个字符串,让你删除或添加某些字母让这个字符串变成回文串,删除或添加某个字母要付出相应的代价,问你变成回文所需要的最小的代价是多少. 思路 :DP[i][j]代表的是 i 到 j ...

  4. POJ 2385: Apple Catching

    借鉴了别人的思路: 1.dp[i][j] = 第i秒走了移动j次所接到的苹果的数目 2.dp[i][j] = max(dp[i-1][j-1]+dp[i-1][j])+(第i秒接到的苹果数目) #in ...

  5. poj 1964 Cow Cycling(dp)

    /* 一开始想的二维的 只维护第几只牛还有圈数 后来发现每只牛的能量是跟随每个状态的 所以再加一维 f[i][j][k]表示第i只牛 领跑的j全 已经消耗了k体力 转移的话分两类 1.换一只牛领跑 那 ...

  6. POJ 3538 Domestic Networks(DP)

    题目链接:点击打开链接 思路: 选一些边, 使得任意两点都可以相互到达且花费最小,  这显然是最小生成树, 将边挑选出来之后, 如果贪心选取的话, 有可能导致无解, 所以我们考虑用动态规划. 根据数据 ...

  7. 联邦学习(FL)+差分隐私(DP)

    联邦学习(FL)+差分隐私(DP) 文章首发在我的博客!在这里在这里在这里在这里在这里!!!!!! 防止梯度信息被泄露的方法有很多,目前主要有两种: 1.基于安全多方计算的 这个里面包含的方法很多,包 ...

  8. 我是一名铺砖匠——铺砖问题汇总(DP)

    鉴于多次遇到铺砖问题,因此目前遇到对此类问题进行总结: 铺砖问题主要分类: 1.简单的一维铺砖问题 2.二维铺砖问题 2*1的砖是否可以铺满N*M的地面 3.二维铺砖铺满有多少种方法 a.2*1的砖铺 ...

  9. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

最新文章

  1. java单元测试覆盖率统计eclemma
  2. IE下的拖拽Drag事件和示例
  3. ABAP OPEN SQL 模糊查询的方法
  4. 你能想象吗?几年后数据科学家纷纷下岗再就业
  5. Linux从入门到精通——Apache
  6. 6.3-4 zip、unzip
  7. oracle ora 01152,ORA-01152 故障解决
  8. win10个人壁纸默认保存位置
  9. codeblock的汉化过程
  10. VBM后的双样本t检验
  11. 2021中国AI商业落地典型案例
  12. sendto 函数中的struct iov_iter结构 (linux-5.0)
  13. spring源码解析专栏导航
  14. 隐藏窗口任务栏图标的三种方法
  15. 《Mini-Me: An Adaptive Avatar for Mixed Reality Remote Collaboration》论文笔记
  16. C#使用拉依达准则(3σ准则)剔除异常数据(.Net剔除一组数据中的奇异值)
  17. 2021云计算技能竞赛真题
  18. 身份证校验和获取身份证信息的方法
  19. 电子书管理软件Calibre
  20. 啥子是volatile

热门文章

  1. Sharepoint学习笔记—ECM系列--根据位置设置的默认元数据值(Location-Based Metadata Defaults)...
  2. Spring-data-jpa常用方法
  3. openssl、ssh
  4. Docker学习笔记——Java及Tomcat Dockerfile
  5. Oracle 存储过程错误之PLS-00201: 必须声明标识符
  6. 高通被欧盟指控垄断 或将面临高达25亿美元罚款
  7. 〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示
  8. PostMessage发送字符串和结构体
  9. 【Project3】技术总结
  10. SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?...