QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#431422 | #6849. Mr. Liang play Card Game | ucup-team3591# | AC ✓ | 14ms | 10016kb | C++14 | 1.5kb | 2024-06-05 15:22:55 | 2024-06-05 15:22:55 |
Judging History
answer
#include<cstdio>
typedef long long ll;
inline ll read(){
ll x=0;
int f=0,ch=0;
while(ch<48||ch>57) f=(ch=='-'),ch=getchar();
while(ch>47&&ch<58) x=(x<<3)+(x<<1)+(ch&15),ch=getchar();
return f?-x:x;
}
inline void write(ll x,char end=' '){
if(x==0){
putchar('0');
putchar(end);
return;
}
if(x<0) putchar('-'),x=-x;
int ch[40]={0},cnt=0;
while(x){
ch[cnt++]=(int)(x%10);
x/=10;
}
while(cnt--) putchar(ch[cnt]+48);
putchar(end);
}
inline ll max(ll x,ll y){return x>y?x:y;}
int a[105];
ll v[105];
int n,m,R;
ll p;
ll dp[105][105];
ll f[105][105][105];
int cnt[105];
int main(){
int T=read();
while(T--){
n=read(),m=read(),R=read(),p=read();
for(int i=1;i<=m;++i) cnt[i]=0;
for(int i=1;i<=n;++i) a[i]=read(),cnt[a[i]]++;
for(int i=1;i<=m;++i) v[i]=read();
for(int l=n;l>=1;--l){
for(int r=l;r<=n;++r){
dp[l][r]=-1e18;
for(int k=0;k<=cnt[a[r]];++k)
f[l][r][k]=-1e18;
if(l==r){
dp[l][r]=v[a[l]];
f[l][r][1]=0;
continue;
}
f[l][r][1]=0;
for(int p=l;p<r;++p){
if(a[p]==a[r]){
for(int i=1;i<cnt[a[r]];++i){
ll x=f[l][r][i+1];
ll y=f[l][p][i]+dp[p+1][r-1];
f[l][r][i+1]=max(x,y);
}
}
}
for(int k=l;k<r;++k)
dp[l][r]=max(dp[l][r],dp[l][k]+dp[k+1][r]);
for(int k=l;k<=r;++k){
ll c=v[a[k]];
for(int d=1;d<=(1<<(R-1))&&d<=cnt[a[k]];d<<=1){
dp[l][r]=max(dp[l][r],f[l][k][d]+c+dp[k+1][r]);
c*=p;
}
}
}
}
write(dp[1][n],'\n');
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 14ms
memory: 10016kb
input:
50 55 2 3 8 2 1 2 1 2 2 2 1 1 1 2 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 1 42126 55001 55 3 1 8 2 3 1 1 3 3 3 2 1 2 1 2 1 2 1 3 1 3 3 2 3 2 2 3 1 1 2 2 2 2 2 3 3 2 2 2 3 1 3 2 1 2 2 1 1 2 2 3 3 3 1 1 3 3 2 39105 57552 26545 55 2 3 9 2 1 2 2 2 2 2 2 2 2 ...
output:
38200162 2330529 69176157 3661875 7083386 1021147 334792 859244 1057821 276184 1182470 1200828 1475228 3028111 796232 331782 440245 952455 977955 1210135 51990 1172231 311282 1044444 773077 1426404 4815974 1239955 1144503 120368 84132 2230930 1259948 680475 528194 599850 861273 1739942 1319720 11729...
result:
ok 50 lines