zoukankan      html  css  js  c++  java
  • bzoj3384[Usaco2004 Nov]Apple Catching 接苹果*&&bzoj1750[Usaco2005 qua]Apple Catching*

    bzoj3384[Usaco2004 Nov]Apple Catching 接苹果

    bzoj1750[Usaco2005 qua]Apple Catching

    题意:

    两棵树,每分钟会从其中一棵树上掉一个苹果下来,捡苹果的人只愿意W次,问初始在树1处最多能捡多少苹果。分钟数≤1000,W≤30。

    题解:

    dp。f[i][j][0/1]表示第i分钟移动了j次现在在第2/1棵树下。具体看代码。

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <queue>
     5 #define inc(i,j,k) for(int i=j;i<=k;i++)
     6 #define maxn 1010
     7 #define INF 0x3fffffff
     8 using namespace std;
     9 
    10 inline int read(){
    11     char ch=getchar(); int f=1,x=0;
    12     while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
    13     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    14     return f*x;
    15 }
    16 bool a[maxn]; int f[2][40][2],n,w,x,y,ans;
    17 int main(){
    18     n=read(); w=read(); inc(i,1,n)a[i]=read()&1; x=0; y=1;
    19     inc(i,0,w)f[x][i][1]=0; inc(i,1,w)f[x][i][0]=0; f[x][0][0]=-INF;
    20     inc(i,2,n+1){
    21         if(!a[i-1])f[y][0][0]=f[x][0][0]+1,f[y][0][1]=f[x][0][1];
    22         else f[y][0][0]=f[x][0][0],f[y][0][1]=f[x][0][1]+1;
    23         inc(j,1,w){
    24             if(!a[i-1])f[y][j][0]=max(f[x][j-1][1],f[x][j][0]+1),
    25             f[y][j][1]=max(f[x][j-1][0]+1,f[x][j][1]);
    26             else f[y][j][0]=max(f[x][j-1][1]+1,f[x][j][0]),
    27             f[y][j][1]=max(f[x][j-1][0],f[x][j][1]+1);
    28         }
    29         swap(x,y);
    30     }
    31     inc(i,0,w)ans=max(ans,max(f[x][i][0],f[x][i][1])); printf("%d",ans); return 0;
    32 }

    20161017

  • 相关阅读:
    JavaScript语言和jQuery技术1
    JSP2
    JavaScript语言和jQuery技术2
    MYSQL2
    JSP1
    JSP5
    JSP3
    Spring框架
    JSP4
    MYSQL3(查询)
  • 原文地址:https://www.cnblogs.com/YuanZiming/p/5980733.html
Copyright © 2011-2022 走看看