区间DP
1.区间dp的定义
在区间上进行动态规划,求解某一个区间的状态的值。主要通过合并小区间的状态进而求出整个大区间状态的值的dp算法。
2.石子合并
2.1 思路
2.2 时间复杂度分析
O(n^3) :总共 n*n种状态,每一种状态计算量为n.
2.3 AC代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=310;
int n,a[N],s[N],f[N][N];
signed main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];//石子质量
for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];//计算质量和
for(int len=2;len<=n;len++)//循环区间长度
for(int i=1;i+len-1<=n;i++)//循环区间左端点
{
int j=i+len-1;
f[i][j]=1e8;
//循环决策
for(int k=i;k<j;k++) f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1