POJ 2385 DP
题意:在苹果树下,初始在第一棵树下,告诉你在第几秒的时候,那棵树下会落下苹果,告诉最多能移动的次数,然后来回移动,求能得到的最大的苹果数目。
思路:三维DP,d[第i秒][已经移动j次][当前在(1,2)棵树下],背包优化,DP尽可能让状态简单一点,有时候 维数 越大越好,以免更多的if else ;
两种状态:
dp[i][j][1] = max(dp[i - 1][j - 1][2], dp[i - 1][j][1]) + (num[i] == 1);///在第1棵树下,如果num[i]==1就+1
dp[i][j][2] = max(dp[i - 1][j - 1][1], dp[i - 1][j][2]) + (num[i] == 2);///在第2棵树下,如果num[i]==2就+1
两次都是等于max(前一秒前一次交换的非当前树的苹果 , 前一秒不交换的当前树的苹果数) + 如果是当前树下+1;
这个状态的最大值等于上一个状态(交换/不交换)能得到的最大值+(1?);
(PS: s +=(num[i]==2) 表示如果num[i]==2就加1,也可以用为 s += (num[i]>4),如果num[i]大于4就+1)
#include <stdio.h>
#include <iostream>
using namespace std;
int num[];
int dp[][][];
int main()
{
int n, times, maxsum = -;
scanf("%d%d", &n, ×);
for (int i = ; i <= n; i++)
scanf("%d", &num[i]);
for (int i=; i<=n; i++)
{
dp[i][][] = dp[i - ][][] + (num[i] == );
dp[i][][] = dp[i - ][][] + (num[i] == );
for (int j = ; j <= times; j++)
{
///第i秒,第j次换是0,不换是1
dp[i][j][] = max(dp[i - ][j - ][], dp[i - ][j][]) + (num[i] == );///在第1棵树下,如果num[i]==1就+1
dp[i][j][] = max(dp[i - ][j - ][], dp[i - ][j][]) + (num[i] == );///在第2棵树下,如果num[i]==2就+1
maxsum = max(maxsum, max(dp[i][j][], dp[i][j][]));///第j次的时候在那棵树下最多
}
}
printf("%d\n", maxsum);
return ;
}
POJ 2385 DP的更多相关文章
- poj 2385【动态规划】
poj 2385 Apple Catching Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14007 Accepte ...
- 【DP】POJ 2385
题意:又是Bessie 这头牛在折腾,这回他喜欢吃苹果,于是在两棵苹果树下等着接苹果,但苹果不能落地后再接,吃的时间不算,假设他能拿得下所有苹果,但是这头牛太懒了[POJ另一道题目说它是头勤奋的奶牛, ...
- DP:Apple Catching(POJ 2385)
牛如何吃苹果 问题大意:一个叫Bessie的牛,可以吃苹果,然后有两棵树,树上苹果每分钟会掉一个,这只牛一分钟可以在两棵树中往返吃苹果(且不吃地上的),然后折返只能是有限次W,问你这只叫Bessie的 ...
- 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【DP】
题意:2棵苹果树在T分钟内每分钟随机由某一棵苹果树掉下一个苹果,奶牛站在树#1下等着吃苹果,它最多愿意移动W次,问它最多能吃到几个苹果.思路:不妨按时间来思考,一给定时刻i,转移次数已知为j, 则它只 ...
- 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 树上掉苹果问题 dp算法
题意:有树1 树2 会掉苹果,奶牛去捡,只能移动w次,开始的时候在树1 问最多可以捡多少个苹果? 思路: dp[i][j]表示i分钟移动j次捡到苹果的最大值 实例分析 0,1 1,2...说明 偶数 ...
- POJ 2385 Apple Catching ( 经典DP )
题意 : 有两颗苹果树,在 1~T 的时间内会有两颗中的其中一颗落下一颗苹果,一头奶牛想要获取最多的苹果,但是它能够在树间转移的次数为 W 且奶牛一开始是在第一颗树下,请编程算出最多的奶牛获得的苹果数 ...
- POJ - 2385 Apple Catching (dp)
题意:有两棵树,标号为1和2,在Tmin内,每分钟都会有一个苹果从其中一棵树上落下,问最多移动M次的情况下(该人可瞬间移动),最多能吃到多少苹果.假设该人一开始在标号为1的树下. 分析: 1.dp[x ...
随机推荐
- hdu----(2222)Keywords Search(trie树)
Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 初学java之常用组件
import javax.swing.*; import java.awt.*; class Win extends JFrame { JTextField mytext; // 设置一个文本区 JB ...
- Laravel
Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁.富于 ...
- 委托传参,lambda
今天一朋友问到一问题,怎么在timer的委托里面传参数,我初一想Invoke 可以传参数吧,我就说了. 后来他说这个委托是微软定义,不能变参数,于是我就自己写了一段代码试 试. 我最初写的代码如下 p ...
- ODBC 小例
#include "stdafx.h"#include <windows.h>#include <stdio.h>#include <iostream ...
- MySQL 查看表结构
mysql查看表结构命令,如下: desc 表名; show columns from 表名; describe 表名; show create table 表名; use information_s ...
- js模拟快捷键操作表单
<html> <head> </head> <body> <script> //键盘快捷键提交表单ctrl+s document.onkey ...
- c++ 普通高精减
//c++ 普通高精减 //codevs 3115 高精度练习之减法 //内容简单,就不注释了. //注意下,&&优先级高于||. #include<cstdio>#inc ...
- NOIP2005 等价表达式 解题报告
明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些代数表达式是和 ...
- [开发笔记]-VS2012打开解决方案崩溃或点击项目崩溃
下午在使用VS2012建立Service服务项目时,只要一切换到设计视图页面中,VS就崩溃重启,从网上找了一种方法来解决,测试可行.但导致该问题的原因未知. 解决方案: 步骤1:开始-->所有程 ...