POJ2385-Apple Catching
http://poj.org/problem?id=2385
当初也是看了别人的解题报告- -#。。。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[1001][31],num[1001]; int main(void) { int T,W,i,j; while(scanf("%d%d",&T,&W)!=EOF) { for(i=1;i<=T;i++) scanf("%d",&num[i]); memset(dp,0,sizeof(dp)); if(num[1]==1) dp[1][0]=1; dp[1][1]=1; for(i=2;i<=T;i++) for(j=0;j<=W;j++) { if(j==0) { dp[i][j]=dp[i-1][j]+num[i]%2; continue; } dp[i][j]=max(dp[i][j],dp[i-1][j]+(j%2+1==num[i])); dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1); } printf("%d\n",dp[T][W]); } return 0; }