POJ - 2385 Apple Catching (dp)
题意:有两棵树,标号为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)相关推荐
- poj 2382 Apple Catching 入门dp
点击打开链接 #include <iostream> #include <algorithm> using namespace std; const int M =1010; ...
- POJ 2385 Apple Catching
题目链接 题意 一共有两个苹果树,每个树会落下苹果,一共会掉下T个苹果,Bessie最初在第一棵树,一共可以移动W次,最多可以接到几个苹果 AC dp dp[ i ][ j ]表示第 i 个苹果在移动 ...
- POJ 3280 Cheapest Palindrome(DP)
题目链接 题意 :给你一个字符串,让你删除或添加某些字母让这个字符串变成回文串,删除或添加某个字母要付出相应的代价,问你变成回文所需要的最小的代价是多少. 思路 :DP[i][j]代表的是 i 到 j ...
- 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 ...
- poj 1964 Cow Cycling(dp)
/* 一开始想的二维的 只维护第几只牛还有圈数 后来发现每只牛的能量是跟随每个状态的 所以再加一维 f[i][j][k]表示第i只牛 领跑的j全 已经消耗了k体力 转移的话分两类 1.换一只牛领跑 那 ...
- POJ 3538 Domestic Networks(DP)
题目链接:点击打开链接 思路: 选一些边, 使得任意两点都可以相互到达且花费最小, 这显然是最小生成树, 将边挑选出来之后, 如果贪心选取的话, 有可能导致无解, 所以我们考虑用动态规划. 根据数据 ...
- 联邦学习(FL)+差分隐私(DP)
联邦学习(FL)+差分隐私(DP) 文章首发在我的博客!在这里在这里在这里在这里在这里!!!!!! 防止梯度信息被泄露的方法有很多,目前主要有两种: 1.基于安全多方计算的 这个里面包含的方法很多,包 ...
- 我是一名铺砖匠——铺砖问题汇总(DP)
鉴于多次遇到铺砖问题,因此目前遇到对此类问题进行总结: 铺砖问题主要分类: 1.简单的一维铺砖问题 2.二维铺砖问题 2*1的砖是否可以铺满N*M的地面 3.二维铺砖铺满有多少种方法 a.2*1的砖铺 ...
- 求三角形最大面积(DP)
求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...
最新文章
- java单元测试覆盖率统计eclemma
- IE下的拖拽Drag事件和示例
- ABAP OPEN SQL 模糊查询的方法
- 你能想象吗?几年后数据科学家纷纷下岗再就业
- Linux从入门到精通——Apache
- 6.3-4 zip、unzip
- oracle ora 01152,ORA-01152 故障解决
- win10个人壁纸默认保存位置
- codeblock的汉化过程
- VBM后的双样本t检验
- 2021中国AI商业落地典型案例
- sendto 函数中的struct iov_iter结构 (linux-5.0)
- spring源码解析专栏导航
- 隐藏窗口任务栏图标的三种方法
- 《Mini-Me: An Adaptive Avatar for Mixed Reality Remote Collaboration》论文笔记
- C#使用拉依达准则(3σ准则)剔除异常数据(.Net剔除一组数据中的奇异值)
- 2021云计算技能竞赛真题
- 身份证校验和获取身份证信息的方法
- 电子书管理软件Calibre
- 啥子是volatile
热门文章
- Sharepoint学习笔记—ECM系列--根据位置设置的默认元数据值(Location-Based Metadata Defaults)...
- Spring-data-jpa常用方法
- openssl、ssh
- Docker学习笔记——Java及Tomcat Dockerfile
- Oracle 存储过程错误之PLS-00201: 必须声明标识符
- 高通被欧盟指控垄断 或将面临高达25亿美元罚款
- 〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示
- PostMessage发送字符串和结构体
- 【Project3】技术总结
- SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?...