题解地址:HDU4283 题解
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn =105;
const int INF =0x4f4f4f4f;
int T, kase=0;
int n;
int a[maxn];
int sum[maxn];
int dp[maxn][maxn];
void input(){
cin>>n;
sum[0]=0;
for(int i=1; i<=n; ++i){
cin>>a[i];
sum[i]=a[i]+sum[i-1];
}
memset(dp, 0 ,sizeof(dp));
for(int i=1; i<=n; ++i)
for(int j=i+1; j<=n; ++j)
dp[i][j]=INF;
}
int main(){
cin>>T;
while(T--){
input();
for(int len=1;len<n;++len)
for(int i=1; i+len<=n;++i){
int j=i+len;
for(int k = 1; k<=j-i+1; k++)
dp[i][j] = min(dp[i][j],
dp[i+1][i+k-1]
+dp[i+k][j]+k*(sum[j]-sum[i+k-1])
+a[i]*(k-1));
}
printf("Case #%d: %d\n", ++kase, dp[1][n]);
}
return 0;
}