Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35067 | LYLAKIOI | 【S】T3 | C++ | 通过 | 100 | 53 MS | 7804 KB | 1831 | 2024-11-26 15:33:43 |
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,K,w,c[205],m[205],p[205]; ll F[205][205],f[205][205][11],g[205][205][11]; void slv(){ n=read(),K=read(),w=read(); up(i,1,n)c[i]=read();up(i,1,n)m[i]=read();up(i,K,2*K-2)p[i]=read(); //memset(F,128,sizeof(F)),memset(f,128,sizeof(f)),memset(g,128,sizeof(g)); up(i,1,K-1)p[i]=p[K]-(K-i)*w; up(i,0,204)up(j,0,204)F[i][j]=-5e10; up(i,0,204)up(j,0,204)up(k,0,10)f[i][j][k]=g[i][j][k]=-5e10; up(i,1,n)F[i][i]=p[m[i]],F[i][i-1]=0,f[i][i][m[i]]=g[i][i][m[i]]=0; up(L,2,n)up(l,1,n-L+1){ int r=l+L-1; up(k,l,r-1)if(c[k]!=c[r+1]||c[k+1]!=c[l-1])F[l][r]=max(F[l][r],F[l][k]+F[k+1][r]); f[l][r][m[l]]=max(f[l][r][m[l]],F[l+1][r]); g[l][r][m[r]]=max(g[l][r][m[r]],F[l][r-1]); up(k,l+1,r)if(c[l]==c[k])up(j,0,K-1)if(j+m[l]<K)f[l][r][j+m[l]]=max(f[l][r][j+m[l]],F[l+1][k-1]+f[k][r][j]); up(k,l,r-1)if(c[r]==c[k])up(j,0,K-1)if(j+m[r]<K)g[l][r][j+m[r]]=max(g[l][r][j+m[r]],F[k+1][r-1]+g[l][k][j]); if(c[l]==c[r]){ up(k,l,r-1)up(i,0,K-1)up(j,0,K-1)F[l][r]=max(F[l][r],f[l][k][i]+g[k+1][r][j]+p[i+j]); } //printf("F[%d][%d]=%lld\n",l,r,F[l][r]); } cout<<F[1][n]; }int main(){ //freopen("basketball.in","r",stdin); //freopen("basketball.out","w",stdout); slv(); fclose(stdin); fclose(stdout); return 0; }