P1775
分析!!
若最初的
因此,在任意时刻,任意一堆石子都可以用一个闭区间
另外,一定存在一个整数
对应到动态规划中,就意味着两个长度较小的区间上的信息向一个更长的区间发生了转移,划分点
自然地,应该把区间长度
不过,区间长度可以有左端点到右端点表示出,即
代码(我知道你们只会看这个)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 305;
int a[N],f[N][N],sum[N],n;
int main(){
scanf("%d",&n);
memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
f[i][i]=0;
sum[i]=sum[i-1]+a[i];
}
for(int len=2;len<=n;++len){
for(int l=1;l<=n-len+1;++l){
int r=l+len-1;
for(int k=l;k<r;++k){
f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]);
}
f[l][r]+=sum[r]-sum[l-1];
}
}
printf("%d",f[1][n]);
return 0;
}