51nod 1021 石子归并
区间dp
递推比递归的常数要小 所以还是尽量学会递推吧
看题解 各种恶心啊 有木有
还是视频讲的直接呃 不过就是讲的有点儿慢
链接:https://www.bilibili.com/video/av12159085/
#include<bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; int dp[120][120],s[120],sum[120]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&s[i]),sum[i] = sum[i-1] +s[i]; //先枚举区间长度即r-l for(int d=1;d < n;d++) { for(int i=1,j;(j=i+d)<=n;i++)//再枚举区间起点 { dp[i][j] = inf; for(int k=i;k<j;k++) dp[i][j] = min(dp[i][k]+dp[k+1][j],dp[i][j]); dp[i][j] += sum[j]-sum[i-1]; } } printf("%d\n",dp[1][n]); }