提交时间:2024-01-04 12:40:21

运行 ID: 24575

#include <bits/stdc++.h> #define int long long #define endl "\n" using namespace std; int n,m; int a[2020],c[2020]; int w[4020]; int f[2020][1<<11]; int t[1<<11]; int g[2020]; int W[2050][1<<11]; const int N=1<<11; const int lim=11; int T; inline void chkmx(int &x,int y){ x=max(x,y); } signed main(){ ios::sync_with_stdio(0); //freopen("a.in","r",stdin); //freopen("a.out","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++)cin>>c[i]; for(int i=1;i<=n+m;i++)cin>>w[i]; T=min(m+15,n+m); reverse(a+1,a+n+1); reverse(c+1,c+n+1); for(int i=1;i<=T;i++){ for(int S=0;S<N;S++){ int p=0; for(int j=0;j<lim;j++) if((S>>j)&1)p++; else break; for(int j=0;j<=p;j++) W[i][S]+=w[i+j]; } } memset(f,-0x3f,sizeof(f)); memset(g,-0x3f,sizeof(g)); g[0]=f[0][0]=0; for(int i=1;i<=n;i++){ int lim=max(0ll,a[i]-10); memset(t,-0x3f,sizeof(t)); for(int j=lim;j<=a[i];j++) for(int S=0;S<N;S++){ int Sp=S>>(a[i]-j); //if(Sp>N)continue; chkmx(t[Sp+1],f[j][S]+W[a[i]][Sp]-c[i]); } for(int j=0;j<lim;j++) chkmx(t[1],g[j]+w[a[i]]-c[i]); for(int S=0;S<N;S++) chkmx(g[a[i]],t[S]),chkmx(f[a[i]][S],t[S]); } int res=0; for(int i=0;i<=T;i++) chkmx(res,g[i]); cout<<res<<endl; cout.flush(); return 0; }