Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
35054 baka24 【S】T3 C++ 解答错误 28 1 MS 316 KB 1981 2024-11-26 15:02:28

Tests(7/25):


#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fr first #define sc second #define mk make_pair 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,inf=1e9; int n,k,m,ans,c[MAXN],a[MAXN],p[MAXN]; int da[MAXN][MAXN],dc[MAXN][MAXN],dn[MAXN]; void init(int id){ for(int i=1;i<=dn[id];i++)da[id+1][i]=da[id][i],dc[id+1][i]=dc[id][i]; dn[id+1]=dn[id]; } int del(int id,int x){ int res=p[max(k,da[id][x])]-max(0ll,k-da[id][x])*m; da[id][x]=dc[id][x]=0; if(x&&x<dn[id]){ if(dc[id][x-1]==dc[id][x+1]){ da[id][x-1]+=da[id][x+1]; dn[id]-=2; for(int i=x;i<=dn[id];i++)da[id][i]=da[id][i+2],dc[id][i]=dc[id][i+2]; return res; } } dn[id]--; for(int i=x;i<=dn[id];i++)da[id][i]=da[id][i+1],dc[id][i]=dc[id][i+1]; return res; } void dfs(int now,int sum){ if(!dn[now]){ ans=max(ans,sum); return; } bool fl=0; for(int i=1;i<=dn[now];i++)fl|=da[now][i]>=k; if(fl){ for(int i=1;i<=dn[now];i++)if(da[now][i]>=k){ init(now); dfs(now+1,sum+del(now+1,i)); } } else{ for(int i=1;i<=dn[now];i++){ init(now); dfs(now+1,sum+del(now+1,i)); } } } void slv(){ 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(); if(n<=10){ for(int i=1;i<=n;i++)dc[0][i]=c[i]; for(int i=1;i<=n;i++)da[0][i]=a[i]; dn[0]=n;ans=-inf; dfs(0,0); printf("%lld",ans); } else{ for(int i=1;i<=n;i++)ans+=p[max(k,a[i])]-max(0ll,k-a[i])*m; printf("%lld",ans); } } signed main(){ slv(); return 0; }


测评信息: