這一套題的質量都非常不錯。
最後的答案是每一個數乘上一個係數相加而得。
就是計算了不同係數下的最小值。
,表示區間的左、右邊界。、表示,的係數。
中間的數的係數肯定是左右兩個數的係數之和。
模擬即可。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,a[20];
ll dp(int l,int r,ll xl,ll xr)
{
if(l+1==r)return 0;
ll ans=1e18;
for(int i=l+1;i<r;i++)
ans=min(ans,dp(l,i,xl,xl+xr)+dp(i,r,xl+xr,xr)+(xl+xr)*a[i]);
return ans;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
printf("%lld",dp(1,n,1,1)+a[1]+a[n]);
return 0;
}