题意: 解法: 设d[l][r]为消除[l,r]的最小代价, 转移方程: d[l][r]=min(d[l][r],d[l][k-1]+d[k+1][r]+(r-l+1-1)*cost[k]). code: #include <bits/stdc++.h> #define int long long using namespace std; const int maxm=2e5+5; int d[111][111]; int a[111]; int n; int dfs(int l,int r){ if(l>r)return 0; if(d[l][r]!=-1)return d[l][r]; d[l][r]=1e18; for(int i=l;i<=r;i++){ d[l][r]=min(d[l][r],(r-l+1-1)*a[i]+dfs(l,i-1)+dfs(i+1,r)); } return d[l][r]; } void solve(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ d[i][j]=-1; } } int ans=dfs(1,n); cout<<ans<<endl; } signed main(){ ios::sync_with_stdio(0); int T;cin>>T; while(T--){ solve(); } return 0; }