区间 DP 板子,实在找不出错,求助qwq
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=405;
ll n,a[maxn],dp[maxn][maxn],s[maxn];
//dp[i][j] 表示从 i 到 j 的最小价值
int main()
{
cin>>n;
memset(dp,0x3f,sizeof(dp));
for(int i=1;i<=n;i++)
{
cin>>a[i];
dp[i][i]=a[i];
s[i]=s[i-1]+a[i];
}
for(int k=2;k<=n;k++)
{
for(int i=1;i<=n-k+1;i++)
{
int j=i+k-1;
for(int m=i;m<=j-1;m++)
{
dp[i][j]=min(dp[i][j],dp[i][m]+dp[m+1][j]);
}
dp[i][j]+=s[j]-s[i-1];
}
}
cout<<dp[1][n];
return 0;
}