#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[66][66],d[66];
int main(){
int l,n;
while( scanf("%d", &l) == 1 && l ){
scanf("%d", &n);
for(int i=1;i<=n;i++) scanf("%d", &d[i]);
d[0]=0; d[n+1]=l;
memset(dp,0x3f,sizeof(dp));
for(int i=0;i<n+1;i++) dp[i][i+1]=0;
for(int len=2;len<=n+1;len++){
for(int i=0;i+len<=n+1;i++){
int j=i+len;
for(int k=i+1;k<j;k++)
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+(d[j]-d[i]));
}
}
printf("The minimum cutting is %d.\n",dp[0][n+1]);
}
}
uva 10003 一根木棍上有n个切割点 每次选一个点切割,求总切割费用最小 区间DP
最新推荐文章于 2024-07-20 17:49:57 发布