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