ZOJ 3741 Eternal Reality 简单DP

来源:互联网 发布:java三大体系 编辑:程序博客网 时间:2024/04/30 14:54

被Level 6坑了,不解释。。。

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;const int maxn=320;int t,n,x,y;int a[maxn];int dp[maxn];int work(int i){    return(a[i]<=t?1:0);}int main(){   // freopen("in.txt","r",stdin);    while (~scanf("%d%d%d%d",&t,&n,&x,&y))    {        memset(dp,0,sizeof(dp));        for (int i=1;i<=n;i++)        {            scanf("%d",&a[i]);            if (a[i]<=t) dp[i]++;            dp[i]+=dp[i-1];        }        for (int i=n+1;i<n+x+y;i++)        {            a[i]=10;            dp[i]=dp[i-1];        }        for (int i=1;i<=n;i++)        {            int s=0;            for (int j=i;j<i+x;j++)                if (a[j]<=t+1&&a[j]!=6) s++;            for (int j=i+x;j<i+x+y;j++)                if (a[j]==0) s++;            dp[i+x+y-1]=max(dp[i+x+y-1],dp[i-1]+s);            dp[i+x+y-1]=max(dp[i+x+y-1],dp[i+x+y-1-1]+work(i+x+y-1));        }//        for (int i=1;i<n+x+y;i++)//        cout<<i<<" "<<dp[i]<<endl;        int ans=0;        for (int i=1;i<n+x+y;i++)        ans=max(ans,dp[i]);        printf("%d\n",ans);    }    return 0;}



0 0
原创粉丝点击