程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> bzoj 3384: [Usaco2004 Nov]Apple Catching 接蘋果,bzojusaco2004

bzoj 3384: [Usaco2004 Nov]Apple Catching 接蘋果,bzojusaco2004

編輯:C++入門知識

bzoj 3384: [Usaco2004 Nov]Apple Catching 接蘋果,bzojusaco2004


雙倍經驗題。。。 -->1750

 

  dp!!

3384: [Usaco2004 Nov]Apple Catching 接蘋果

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 61  Solved: 52
[Submit][Status][Discuss]

Description

    很少有人知道奶牛愛吃蘋果.農夫約翰的農場上有兩棵蘋果樹(編號為1和2),每一棵樹上都長滿了蘋果.奶牛貝茜無法摘下樹上的蘋果,所以她只能等待蘋果從樹上落下.但是,由於蘋果掉到地上會摔爛,貝茜必須在半空中接住蘋果(沒有人愛吃摔爛的蘋果).貝茜吃東西很快,所以她接到蘋果後僅用幾秒鐘就能吃完.每一分鐘,兩棵蘋果樹其中的一棵會掉落一個蘋果.貝茜已經過了足夠的訓練,只要站在樹下就一定能接住這棵樹上掉落的蘋果.同時,貝茜能夠在兩棵樹之間快速移動(移動時間遠少於1分鐘),因此當蘋果掉落時,她必定站在兩棵樹其中的一棵下面.此外,奶牛不願意不停地往返於兩棵樹之間,因此會錯過一些蘋果, 蘋果每分鐘掉落一個,共T(1≤T≤1000)分鐘,貝茜最多願意移動W(I≤w≤30)次.現給 出每分鐘掉落蘋果的樹的編號,要求判定貝茜能夠接住的最多蘋果數.開始時貝茜在1號樹下.

Input

    第1行:由空格隔開的兩個整數T和W.     第2到T+1行:1或2(每分鐘掉落蘋果的樹的編號).

Output

      在貝茜移動次數不超過W的前提下她能接到的最多蘋果數

Sample Input

7 2
2
1
1
2
2
1
1

Sample Output

6

HINT

 

  7分鐘內共掉落7個蘋果一一第1個從第2棵樹上掉落,接下來的2個蘋果從第1棵樹上掉落,再接下來的2個從第2棵樹上掉落,最後2個從第1棵樹上掉落.   貝茜不移動直到接到從第1棵樹上掉落的兩個蘋果,然後移動到第2棵樹下,直到接到從第2棵


樹上掉落的兩個蘋果,最後移動到第1棵樹下,接住最後兩個從第1棵樹上掉落的蘋果.這樣貝茜共接住6個蘋果.


 

 

Source

Gold

 

#include<cstdio>
int max(int a,int b){return a>b?a:b;}
int t,w,dp[1010][33][2],n[1010],ans;
int main()
{
    scanf("%d%d",&t,&w);
    for(int i=1;i<=t;i++) scanf("%d",&n[i]);
    for(int i=1;i<=t;i++)
    {
        dp[i][0][0]=dp[i-1][0][0]+(n[i]==1);
        dp[i][0][1]=dp[i-1][0][1]+(n[i]==2);
        for(int j=1;j<=w;j++)
        {
            dp[i][j][0]=max(dp[i-1][j-1][1],dp[i-1][j][0])+(n[i]==1);
            dp[i][j][1]=max(dp[i-1][j-1][0],dp[i-1][j][1])+(n[i]==2);
            ans=max(ans,max(dp[i][j][0],dp[i][j][1]));
        }
    }
    printf("%d",ans);
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved