Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
32718 | hi_hi | 【J】序列 | C++ | 运行超时 | 48 | 1000 MS | 592 KB | 1034 | 2024-09-27 10:56:10 |
#include<bits/stdc++.h> using namespace std; long long n,a[200],c[200],sum[200][200],t[100005],top,nmax; long long vis[100005]; void dfs(long long deep,long long su){ if(deep==n){ nmax=max(nmax,su); return; } for(int i=1;i<=top;i++){ if(vis[i]==0){ vis[i]=1; dfs(deep+t[i],su+sum[deep+1][deep+t[i]]); vis[i]=0; } } } int main(){ 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]); } 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]; } } for(int i=1;i<=n;i++){ if(c[i]==0)continue; for(int j=1;j<=c[i];j++){ t[++top]=i; } } dfs(0,0); printf("%lld",nmax); return 0; }