Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
35068 baka24 【S】T3 C++ 解答错误 20 90 MS 31048 KB 1942 2024-11-26 15:34:45

Tests(5/25):


#include<bits/stdc++.h> using namespace std; #define int long long int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=310,N=20,inf=1e9; int n,K,m,ans,c[MAXN],a[MAXN],p[MAXN],f[MAXN][MAXN],fl[MAXN][MAXN][N],fr[MAXN][MAXN][N]; void Max(int &x,int y){x=max(x,y);} void slv(){ memset(f,-0x3f,sizeof(f)),memset(fl,-0x3f,sizeof(fl)),memset(fr,-0x3f,sizeof(fr)); n=read(),K=read(),m=read(); for(int i=1;i<=n;i++)c[i]=read(); for(int i=1;i<=n;i++)a[i]=read(); for(int i=K;i<=2*K-2;i++)p[i]=read(); for(int i=0;i<K;i++)p[i]=p[K]-(K-i)*m; for(int i=1;i<=n;i++)f[i][i]=p[a[i]],fl[i][i][a[i]]=fr[i][i][a[i]]=f[i][i-1]=0;f[n+1][n]=0; for(int l=n;l>=1;l--){ for(int r=l;r<=n;r++){ fl[l][r][a[l]]=f[l+1][r]; fr[l][r][a[r]]=f[l][r-1]; for(int p=0;p<=2*K;p++) for(int k=l;k<=r;k++){ if(p>=a[l]&&c[l]==c[k])Max(fl[l][r][p],f[l+1][k-1]+fl[k][r][p-a[l]]); if(p>=a[r]&&c[k]==c[r])Max(fr[l][r][p],f[k+1][r]+fr[l][k][p-a[r]]); } if(c[l]==c[r]){ for(int k=l;k<=r;k++) for(int i=1;i<K;i++) for(int j=1;j<K;j++) Max(f[l][r],fl[l][k][i]+fr[k+1][r][j]+p[i+j]); } else{ for(int k=l;k<=r;k++)if(c[k]!=c[r+1]&&c[k]!=c[l-1])Max(f[l][r],f[l][k]+f[k+1][r]); } // cout<<l<<" "<<r<<":"<<f[l][r]<<endl; // for(int i=0;i<=K;i++)cout<<fl[l][r][i]<<" ";cout<<endl; // for(int i=0;i<=K;i++)cout<<fr[l][r][i]<<" ";cout<<endl; } } printf("%lld",f[1][n]); } signed main(){ // freopen("basketball2.in","r",stdin);freopen("basketball.out","w",stdout); slv(); return 0; }


测评信息: