题意:在苹果树下,初始在第一棵树下,告诉你在第几秒的时候,那棵树下会落下苹果,告诉最多能移动的次数,然后来回移动,求能得到的最大的苹果数目。

思路:三维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, &times);
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的更多相关文章

  1. poj 2385【动态规划】

    poj 2385 Apple Catching Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14007   Accepte ...

  2. 【DP】POJ 2385

    题意:又是Bessie 这头牛在折腾,这回他喜欢吃苹果,于是在两棵苹果树下等着接苹果,但苹果不能落地后再接,吃的时间不算,假设他能拿得下所有苹果,但是这头牛太懒了[POJ另一道题目说它是头勤奋的奶牛, ...

  3. DP:Apple Catching(POJ 2385)

    牛如何吃苹果 问题大意:一个叫Bessie的牛,可以吃苹果,然后有两棵树,树上苹果每分钟会掉一个,这只牛一分钟可以在两棵树中往返吃苹果(且不吃地上的),然后折返只能是有限次W,问你这只叫Bessie的 ...

  4. poj 2385 Apple Catching(dp)

    Description It and ) in his field, each full of apples. Bessie cannot reach the apples when they are ...

  5. POJ 2385 Apple Catching【DP】

    题意:2棵苹果树在T分钟内每分钟随机由某一棵苹果树掉下一个苹果,奶牛站在树#1下等着吃苹果,它最多愿意移动W次,问它最多能吃到几个苹果.思路:不妨按时间来思考,一给定时刻i,转移次数已知为j, 则它只 ...

  6. poj 2385 Apple Catching 基础dp

    Apple Catching   Description It is a little known fact that cows love apples. Farmer John has two ap ...

  7. poj 2385 树上掉苹果问题 dp算法

    题意:有树1 树2 会掉苹果,奶牛去捡,只能移动w次,开始的时候在树1 问最多可以捡多少个苹果? 思路: dp[i][j]表示i分钟移动j次捡到苹果的最大值 实例分析 0,1  1,2...说明 偶数 ...

  8. POJ 2385 Apple Catching ( 经典DP )

    题意 : 有两颗苹果树,在 1~T 的时间内会有两颗中的其中一颗落下一颗苹果,一头奶牛想要获取最多的苹果,但是它能够在树间转移的次数为 W 且奶牛一开始是在第一颗树下,请编程算出最多的奶牛获得的苹果数 ...

  9. POJ - 2385 Apple Catching (dp)

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

随机推荐

  1. 通过Sql语句导数据

    在通过SQL Server向导中的SQL语句导数据时,默认情况下源表中的nvarchar字段类型会变成202,解决此问题的方法是,要重新选择一下对应的数据接收表.

  2. 如何使用java调用DLL运行C++(初篇)

    JNI:Java Native Interface,简称JNI,是Java平台的一部分,可用于让Java和其他语言编写的代码进行交互. 下面是从网上摘取的JNI工作示意图:

  3. HDUOJ----1234 开门人和关门人(浙江大学考研题)

    开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  4. poj1129 Channel Allocation(染色问题)

    题目链接:poj1129 Channel Allocation 题意:要求相邻中继器必须使用不同的频道,求需要使用的频道的最少数目. 题解:就是求图的色数,这里采用求图的色数的近似有效算法——顺序着色 ...

  5. 更改电脑与eclpse热键冲突

  6. BZOJ3695 滑行

    转化模型就变成几层折射率不同的玻璃光要怎么走才能从(0, 0)到(x, y) 我们发现第一次光线射出去的角度确定,之后光的行程是确定的 而且角度和最后到达y时的x成正相关,于是可以二分! 然后物理学学 ...

  7. mongodb 和 mysql 的对照

    In addition to the charts that follow, you might want to consider the Frequently Asked Questions sec ...

  8. 斐波那契博弈(Fibonacci Nim)

    问题: 有一堆个数为n(n>=2)的石子,游戏双方轮流取石子,规则如下: 1)先手不能在第一次把所有的石子取完,至少取1颗: 2)之后每次可以取的石子数至少为1,至多为对手刚取的石子数的2倍. ...

  9. netbios wins dns LLMNR

    NetBIOS名称 Network Basic Input/Output System  (RFC-1001,1002)网络基本输入/输出系统协议 NetBIOS是一种高级网络接口,最初是在硬件中实 ...

  10. drbd

    1.DRBD安装 1.1.安装依赖包: [java] view plaincopy yum -y install gcc kernel-devel kernel-headers flex 下载安装dr ...