提交时间:2025-02-07 12:25:07
运行 ID: 35972
#include<bits/stdc++.h> #define int long long using namespace std; map<pair<pair<int,int>,string>,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,string s,int cost){ if(f[make_pair(make_pair(l,r),s)])return f[make_pair(make_pair(l,r),s)]; if(s.length()>=14)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+"1",cost+1)+dfs(i+1,r,s+"2",cost+2)); } f[make_pair(make_pair(l,r),s)]=res; return res; } } void solve(){ int ans=0x3f3f3f3f3f3f3f3f; for(int i=1;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; }