提交时间:2024-01-04 16:15:26
运行 ID: 24594
#include <bits/stdc++.h> using namespace std; #define int long long const int maxn=2e3+20,maxa=5e3+20; int n,m; int a[maxn],b[maxn],val[maxn]; int f[maxa][maxn]; int cnt[maxa]; signed main() { ios::sync_with_stdio(false); cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>b[i]; for(int i=1;i<=n+m;i++) cin>>val[i]; for(int i=1;i<=n/2;i++) swap(a[i],a[n-i+1]),swap(b[i],b[n-i+1]); memset(f,-0x3f,sizeof(f)); for(int i=1;i<=m+n+15;i++) f[i][0]=0; for(int i=1;i<=n;i++) { cnt[a[i]]++; for(int j=n;j>=0;j--) { f[a[i]][j+1]=max(f[a[i]][j+1],f[a[i]][j]-b[i]+val[a[i]]); } for(int j=a[i];j<=a[i]+15;j++) { for(int k=0;k<=n;k++) f[j+1][k/2]=max(f[j+1][k/2],f[j][k]+val[j+1]*(k/2)); } } int ans=0; for(int i=1;i<=m+n+15;i++) ans=max(ans,max(f[i][0],f[i][1])); cout<<ans<<endl; return 0; }