Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
32728 | hi_hi | 【J】序列 | C++ | 通过 | 100 | 68 MS | 2264 KB | 1175 | 2024-09-27 13:25:49 |
#include<bits/stdc++.h> using namespace std; long long n,a[200],c[200],sum[200][200],top,nmax,t[205]; map<long long,long long>dp; inline long long ha(long long cc[]){ long long v=0; for(int i=1;i<=n;i++){ v=v*(t[i]+1)+cc[i]; } return v; } long long dfs(long long c[]){ long long hi=ha(c),deep=0; if(dp[hi]!=0)return dp[hi]; for(int i=1;i<=n;i++){ deep+=i*c[i]; } for(int i=1;i<=n;i++){ if(c[i]!=0){ c[i]--; dp[hi]=max(dp[hi],dfs(c)+sum[deep-i+1][deep]); c[i]++; } } return dp[hi]; } int main(){ // freopen("text.in","r",stdin); // freopen("text.out","w",stdout); scanf("%lld",&n); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } for(int i=1;i<=n;i++){ scanf("%lld",&c[i]); t[i]=c[i]; } for(int i=1;i<=n;i++){ for(int j=i;j<=n;j++){ sum[i][j]=sum[i][j-1]; for(int k=i;k<=j;k++){ sum[i][j]+=2*a[k]*a[j]/(__gcd(a[k],a[j])); } sum[i][j]-=a[j]; } } cout<<dfs(c); return 0; }