Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35974 | daimo | 【S】T4 | C++ | 运行超时 | 0 | 2000 MS | 74056 KB | 1027 | 2025-02-07 12:29:14 |
#include<bits/stdc++.h> #define int long long using namespace std; map<pair<pair<int,int>,int>,int>f; int n; int num[1010]; void readin(){ cin>>n; for(int i=1;i<=n;i++)cin>>num[i]; sort(num+1,num+1+n); reverse(num+1,num+1+n); } int dfs(int l,int r,int s,int cost){ if(f[make_pair(make_pair(l,r),s)])return f[make_pair(make_pair(l,r),s)]; if(s>=1000000000000000)return 0x3f3f3f3f3f3f3f3f; if(l==r){ f[make_pair(make_pair(l,r),s)]=cost*num[l]; return cost*num[l]; }else{ int res=0x3f3f3f3f3f3f3f3f; for(int i=l;i<r;i++){ res=min(res,dfs(l,i,s*10+1,cost+1)+dfs(i+1,r,s*10+2,cost+2)); } f[make_pair(make_pair(l,r),s)]=res; return res; } } void solve(){ int ans=0x3f3f3f3f3f3f3f3f; ans=min(dfs(1,n,1,1),dfs(1,n,2,2)); for(int i=0;i<=n;i++){ ans=min(ans,dfs(1,i,1,1)+dfs(i+1,n,2,2)); } cout<<ans<<endl; } signed main(){ readin(); solve(); return 0; }