提交时间:2024-11-26 19:21:13

运行 ID: 35088

#include <bits/stdc++.h> using namespace std; #define int long long #define endl "\n" int n,k,w; int c[210],m[210]; int p[210]; int f[210][210]; int g[210][210][11]; int h[210][210][11][11]; inline void chkmx(int &x,int y){x=max(x,y);} signed main(){ // freopen("basketball1.in","r",stdin); // freopen("basketball.out","w",stdout); ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n>>k>>w; for(int i=1;i<=n;i++) cin>>c[i]; for(int i=1;i<=n;i++) cin>>m[i]; for(int i=k;i<=2*k-2;i++) cin>>p[i]; for(int i=0;i<k;i++) p[i]=p[k]-(k-i)*w; // for(int i=1;i<=2*k-2;i++) // cout<<p[i]<<" "; // cout<<endl; memset(f,-0x3f,sizeof(f)); memset(g,-0x3f,sizeof(g)); memset(h,-0x3f,sizeof(h)); for(int i=1;i<=n+1;i++) f[i][i-1]=0; for(int len=1;len<=n;len++) for(int l=1;l+len-1<=n;l++){ int r=l+len-1; for(int i=l;i<r;i++) if(c[i]==c[r]) for(int m1=1;m1<k;m1++){ chkmx(h[l][r][m1][m[r]],g[l][i][m1]+f[i+1][r-1]); for(int m2=m[r];m2<k;m2++) chkmx(h[l][r][m1][m2],h[l][i][m1][m2-m[r]]+f[i+1][r-1]); } g[l][r][m[r]]=f[l][r-1]; for(int i=l;i<r;i++) if(c[i]==c[r]) for(int m1=m[r];m1<k;m1++) chkmx(g[l][r][m1],g[l][i][m1-m[r]]+f[i+1][r-1]); // cout<<l<<" "<<r<<endl; // for(int i=1;i<k;i++) // cout<<g[l][r][i]<<" "; // cout<<endl; // cout<<endl; // for(int i=1;i<k;i++,cout<<endl) // for(int j=1;j<k;j++) // cout<<h[l][r][i][j]<<" "; // cout<<endl<<endl; for(int i=l;i<=r;i++) if(c[i]!=c[l-1]&&c[i]!=c[r+1]){ // cout<<l<<" "<<r<<" "<<i<<endl; chkmx(f[l][r],f[l][i-1]+f[i+1][r]+p[m[i]]); for(int m1=1;m1<k;m1++) for(int m2=1;m2<k;m2++){ chkmx(f[l][r],h[l][i][m1][m2]+f[i+1][r]+p[m1+m2]); // if(h[l][i][m1][m2]+f[i+1][r]+p[m1+m2]>=0){ // cout<<l<<" "<<r<<" "<<i<<" "<<m1<<" "<<m2<<" "<<h[l][i][m1][m2]<<" "<<f[i+1][r]<<endl; // } } } } cout<<f[1][n]<<endl; cout.flush(); return 0; }