`
Simone_chou
  • 浏览: 192771 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Apple Catching(DP)

    博客分类:
  • POJ
 
阅读更多
Apple Catching
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 7076   Accepted: 3453

Description

It is a little known fact that cows love apples. Farmer John has two apple trees (which are conveniently numbered 1 and 2) in his field, each full of apples. Bessie cannot reach the apples when they are on the tree, so she must wait for them to fall. However, she must catch them in the air since the apples bruise when they hit the ground (and no one wants to eat bruised apples). Bessie is a quick eater, so an apple she does catch is eaten in just a few seconds. 

Each minute, one of the two apple trees drops an apple. Bessie, having much practice, can catch an apple if she is standing under a tree from which one falls. While Bessie can walk between the two trees quickly (in much less than a minute), she can stand under only one tree at any time. Moreover, cows do not get a lot of exercise, so she is not willing to walk back and forth between the trees endlessly (and thus misses some apples). 

Apples fall (one each minute) for T (1 <= T <= 1,000) minutes. Bessie is willing to walk back and forth at most W (1 <= W <= 30) times. Given which tree will drop an apple each minute, determine the maximum number of apples which Bessie can catch. Bessie starts at tree 1.

Input

* Line 1: Two space separated integers: T and W 

* Lines 2..T+1: 1 or 2: the tree that will drop an apple each minute.

Output

* Line 1: The maximum number of apples Bessie can catch without walking more than W times.

Sample Input

7 2
2
1
1
2
2
1
1

Sample Output

6

Hint

INPUT DETAILS: 

Seven apples fall - one from tree 2, then two in a row from tree 1, then two in a row from tree 2, then two in a row from tree 1. Bessie is willing to walk from one tree to the other twice. 

OUTPUT DETAILS: 

Bessie can catch six apples by staying under tree 1 until the first two have dropped, then moving to tree 2 for the next two, then returning back to tree 1 for the final two.
 

       题意:

       给出 T(1 ~ 1000),W(1 ~ 30),代表有 T 秒,允许走的步数是 W。一共有两棵树,1 和 2 ,每秒中都会有其中一棵树掉苹果下来。后给出这 7s 内掉的分别是哪棵树,问在 W 秒内,最多能接到几个苹果。输出这个数。

 

       思路:

       DP。设 dp [ i ] [ j ] [ k ] 代表 i 秒时候的 j 步内于 k 号数能接到的最大苹果数。所以有两种情况:

       dp [ i ] [ j ] [ 1 ] = max ( dp [ i - 1 ] [ j ] [ 1 ] , dp [ i - 1 ] [ j - 1 ] [ 2 ] ) + tree1 [ i ] ;

       dp [ i ] [ j ] [ 2 ] = max ( dp [ i - 1 ] [ j ] [ 2 ] , dp [ i - 1 ] [ j - 1 ] [ 1 ] ) + tree2 [ i ] ;

       初始化要初始 j = 0 即步数为 0 时候的。

 

       AC:

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>

using namespace std;

const int MAX = 1005;

int tree1[MAX], tree2[MAX];
int dp[MAX][35][5];

int main () {
        int t, w;
        scanf("%d%d", &t, &w);
        memset(tree1, 0, sizeof(tree1));
        memset(tree2, 0, sizeof(tree2));

        for (int i = 1; i <= t; ++i) {
                int ans;
                scanf("%d", &ans);
                if (ans == 1) tree1[i] = 1;
                else tree2[i] = 1;
        }

        for (int i = 1; i <= t; ++i) {
                dp[i][0][1] = dp[i - 1][0][1] + tree1[i];
                dp[i][0][2] = 0;
        }

        for (int i = 1; i <= t; ++i) {
                for (int j = 1; j <= w; ++j) {
                        dp[i][j][1] = max(dp[i - 1][j - 1][2], dp[i - 1][j][1]) + tree1[i];
                        dp[i][j][2] = max(dp[i - 1][j - 1][1], dp[i - 1][j][2]) + tree2[i];
                }
        }

        printf("%d\n", max(dp[t][w][1], dp[t][w][2]));
        return 0;
}

 

分享到:
评论

相关推荐

    Packet filtering - Catching the cool packets.rar

    Packet filtering - Catching the cool packets.rar

    Windows Mobile Camera catching

    在Windows Mobile平台上,开发C++程序来实现视频捕获和照相功能是一项技术性很强的任务。Windows Mobile操作系统,虽然现在已不再主流,但在过去广泛应用于智能手机和平板电脑,特别是企业级应用。...

    Catching Cera-crx插件

    【Catching Cera-crx插件详解】 Catching Cera-crx是一款专为浏览器设计的扩展程序,主要用于在特定的网页环境下提供附加的功能和服务。它采用英文界面,旨在提升用户在浏览网页时的体验,特别是在处理某些百分比...

    Packet Filtering: Catching the Cool Packets!

    This book is designed to support anyone who wants to work in networking with a focus on troubleshooting, optimization and security.

    Catching header messages in a CListView捕捉CListView的头消息

    在Windows编程中,CListView是MFC(Microsoft Foundation Classes)框架提供的一种用于创建列表视图控件的类。它允许用户以列表、图标、详细信息等多种形式显示数据,并且可以处理用户的各种交互操作,如排序、选择...

    black_people_catching_the_coffin.m

    基于matlab实现黑人抬棺的音乐,代码很短较为简单,适合初学者。简单的代码,就可以实现功能,可以用于学习。

    EyesCatchingMessageView.rar

    【EyesCatchingMessageView】是一个专为Android平台设计的自定义控件,它模仿了B站(哔哩哔哩)中的醒目留言效果。通过这个控件,开发者可以在应用程序中轻松实现类似B站那种吸引用户注意力的消息展示方式,增强用户...

    Fruit-Catching

    在本项目“Fruit-Catching”中,我们探讨的核心主题是JavaScript编程,特别是与调试相关的技术。这个项目可能是一个互动的游戏或应用,其中用户需要捕捉不断下落的水果,而我们的任务是确保代码的稳定性和优化用户...

    Exception-Catching---BOXES:展示了如何捕获异常以使错误易于阅读!

    本主题“Exception-Catching---BOXES”主要探讨的是如何利用Java的异常处理机制来捕获和处理异常,以提高错误报告的可读性。 首先,我们来看Java中的异常类层次结构。它基于`Throwable`类,所有异常和错误都继承自...

    2008年英语考研真题答案详解

    【考研英语】是针对硕士研究生入学考试的一项重要科目,它主要测试考生的英语语言综合运用能力,包括词汇、语法、阅读理解、写作等各方面。在2008年的考研英语真题中,我们可以看到以下几个核心知识点: ...

    Catching popular prefixes at AS border routers with a prediction based method

    标题《Catching popular prefixes at AS border routers with a prediction based method》和描述指出了这项研究的核心内容和目标,即通过基于预测的方法,在自治系统(AS)边界路由器上捕获流行前缀。本文内容涉及...

    Fishing Clash: Fish Catching Games-crx插件

    语言:English,English (UK),English (United States) 钓鱼冲突:捉鱼游戏,现在可在Chrome浏览器上使用 与《钓鱼冲突:捉鱼游戏》中的电子游戏史上最著名的英雄一起玩。 ... -在左上角,单击设置以根据需要自定义所有...

    捕捉Cera「Catching Cera」-crx插件

    嵌入一​​个Cera来找到一些页面 支持语言:English

    2009年暑期集训班 USACO讲义集合

    **抓苹果 (AppleCatching, USACO 2004 Nov)** - **背景**: 奶牛们在果园里抓苹果。 - **问题**: 给定奶牛的位置和苹果落地的时间及位置,求出奶牛能抓到的最大苹果数量。 - **输入**: 包括奶牛数量、苹果数量以及每...

    [iPhone开发书籍大全].iPhone.User.Interface.Design.Projects(Apress.2009-11).pdf

    Create a user interface that is eye-catching and stands apart from the crowd Maximize your use of typographic elements for style and readability Perfect entry views and display large amounts of data...

    Android代码-CatchUp

    An app for catching up on things. https://medium.com/@sweers/catching-up-on-catchup-introduction-7581c099f4bc Motivations There's a lot of services I like reading up on throughout the day. Most of ...

    iOS 10 SDK Development: Creating iPhone and iPad Apps with Swift

    iOS 10 SDK Development: Creating iPhone and iPad ... Whether you're new to Swift or just catching up on iOS' latest features, iOS 10 SDK Development will help you master the language and the platform.

    catching-nuts-js-game:Juego zh Javascript,HTML和CSS。 ¡Atrapar las nueces!

    Juego con JavaScript Juego desarrollado配置了JavaScript,HTML和CSS... Ayuda a Scrat a atrapar su alimento最喜欢的人:“ nueces! 通过皮拉尔·加西亚(PilarGarcía)。 人因工厂,Distrtal大学FJDC,2017年。

Global site tag (gtag.js) - Google Analytics