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 }