- 题解
快看
- @ 2026-10-20 16:34:31
789167677891676778916767
1 条评论
-
-
#include<bits/stdc++.h> using namespace std; int n; int a[110],s[110]; int f[110][110];//f[i][j]表示第i~j堆石子合并的最小代价 int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; s[i]=s[i-1]+a[i]; } for(int len=2;len<=n;len++){ for(int l=1;l+len-1<=n;l++){ int r=l+len-1; f[l][r]=1e9; for(int k=l;k<r;k++){ f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]+s[r]-s[l-1]); } } } cout<<f[1][n]<<endl; return 0; }
- 1