poj 2385
Posted 发牌员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 2385相关的知识,希望对你有一定的参考价值。
第一次完全靠自己写出dp,比较激动,让我安静会,,,虽然比较简单。这个题就是分情况讨论就行,我是先通过来回次数考虑位置,然后考虑是否这个位置有苹果落下
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int maxn=1000+10; int a[maxn]; int d[maxn][50]; int n,t; int main() { while(~scanf("%d%d",&n,&t)) { for(int i=1; i<=n; i++) scanf("%d",&a[i]); memset(d,0,sizeof(d)); for(int i=1; i<=n; i++) { int zz=min(i,t); for(int j=0; j<=zz; j++) { if(j%2==0)//现在在第一棵树 { int m1; if(a[i]==1)//第一棵树落苹果 m1=d[i-1][j]+1;//在树下不动 else m1=d[i-1][j]; int m2; if(j-1>=0) m2=d[i-1][j-1]+1;//从另一棵树跑过来 else m2=0; d[i][j]=max(m1,m2); } else if(j%2==1)//在第二颗树 {//同上 int m1; if(a[i]==2) m1=d[i-1][j]+1; else m1=d[i-1][j]; int m2; if(j-1>=0) m2=d[i-1][j-1]+1; else m2=0; d[i][j]=max(m1,m2); } } } int mm=0; for(int i=0;i<=t;i++) mm=max(mm,d[n][i]); printf("%d\n",mm); } return 0; }
以上是关于poj 2385的主要内容,如果未能解决你的问题,请参考以下文章