ZOJ3741 Eternal Reality(DP)

我是渣渣。。。。。。。。。

数组开小了,弹得蛋碎了,关键还返回wa,本地跑没崩掉,一点关闭就崩了。。。。。。。。。

DP考虑每一位上的状态,即用和不用Level Upper,注意LV5是无效的即可,就酱。。。。。。。。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 int L,n,x,y;
 6 int a[110],l[110];
 7 int dp[210];
 8 int DP(int z){
 9     if(dp[z]!=-1) return dp[z];
10     if(z>n) return dp[z]=0;
11     if(a[z]<=L) return dp[z]=max(DP(z+1)+1,DP(z+x+y)+l[z]);
12     else return dp[z]=max(DP(z+1),DP(z+x+y)+l[z]);
13 }
14 int main(){
15     while(~scanf("%d%d%d%d",&L,&n,&x,&y)){
16         for(int i=1;i<=n;i++) scanf("%d",&a[i]);
17         if(L==5){
18             int ans=0;
19             for(int i=1;i<=n;i++){
20                 if(a[i]<=5) ans++;
21             }
22             cout<<ans<<endl;
23             continue;
24         }
25         memset(l,0,sizeof l);
26         for(int i=1;i<=n;i++){
27              for(int j=0;j<x&&i+j<=n;j++){
28                  if(a[i+j]<=L+1) l[i]++;
29              }
30              for(int j=x;j<x+y&&i+j<=n;j++){
31                  if(a[i+j]==0) l[i]++;
32              }
33         }
34         memset(dp,-1,sizeof dp);
35         cout<<DP(1)<<endl;
36     }
37     return 0;
38 }
zoj3741

 

posted @ 2013-12-29 21:28  wonderzy  阅读(159)  评论(0编辑  收藏  举报