[编程笔记]-Interval_DP区间DP

概念

区间DP,在定义状态时,往往定义的是一个区间的情况(不同于线性,线性往往定义的是单个点情况)。具体的,区间DP表示的区间可以重叠,并且可以由另外的有关区间转化而来。

例题

AcWing282-石子合并
LuoguP1775-石子合并

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<bits/stdc++.h>
using namespace std;

const int N=303;

int n;
int a[N],s[N];
int f[N][N];//从第i堆到第j堆石子合并成1个的最小价值

int main(){
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
for(int l=2;l<=n;l++){
for(int i=1;i+l-1<=n;i++){
int j=i+l-1;
f[i][j]=INT_MAX;
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]);
}
}
}
cout<<f[1][n];
return 0;
}

完结撒花o( ̄︶ ̄)o


[编程笔记]-Interval_DP区间DP
http://githarlem.github.io/2024/08/09/Interval-DP/
作者
Harlem
发布于
2024年8月9日
更新于
2024年8月9日
许可协议