Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
32723 LYLAKIOI 【J】序列 C++ 运行超时 52 1000 MS 680 KB 1636 2024-09-27 13:10:24

Tests(13/25):


//WuJue,Start!! #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef double db; const int maxn=1e6+10,V=1e5; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; }int n,p,a[125],c[125];ll v[125][125]; struct node { int d[125]; }; bool operator<(node a,node b){ for(int i=1;i<=n;++i)if(a.d[i]!=b.d[i])return a.d[i]<b.d[i]; return 0; } map<node,ll>dp; int gcd(int a,int b){ return ((!b)?a:gcd(b,a%b)); }int lcm(int a,int b){ return a*b/gcd(a,b); }ll ss; void upd(int l,int r){ for(int i=l;i<=r-1;++i)ss+=lcm(a[i],a[r])*2; ss+=a[r]; }ll calc(node &st){ bool emp=1; for(int i=1;i<=n;++i)if(st.d[i])emp=0; if(emp)return dp[st]; ll res=-1e9; int pos=0;for(int i=1;i<=n;++i)pos=pos+st.d[i]*i; for(int i=1;i<=n;++i){ if(st.d[i]>0&&pos>=i){ st.d[i]--; res=max(res,calc(st)+v[pos-i+1][pos]); st.d[i]++; } }return dp[st]=res; }void slv(){ node lim; n=read();for(int i=1;i<=n;++i)a[i]=read();for(int i=1;i<=n;++i)c[i]=read(),lim.d[i]=c[i]; for(int i=1;i<=n;++i){ ss=0; for(int j=i;j<=n;++j)upd(i,j),v[i][j]=ss; }cout<<calc(lim)<<'\n'; }void tslv(){ int t=read();while(t--)slv(); }int main(){ //freopen("array.in","r",stdin); //freopen("array.out","w",stdout); //freopen("1.in","r",stdin),freopen("1.out","w",stdout); slv(); fclose(stdin); fclose(stdout); return 0; }


测评信息: