#include<stdio.h>
#include<string.h>
int n,a[55];
int dp[51][51];
int DP(int i,int j)
{
if(dp[i][j]!=-1)
return dp[i][j];
else
{
if(i+1==j)//这是一段,切不了,不用切了
{
dp[i][j]=0;
return dp[i][j];
}
else if(i+2==j)//切一刀,最小算上整个长度
{
dp[i][j]=a[j]-a[i];
return dp[i][j];
}
else
{
int tmp=999999;
for(int k=i+1;k<=j-1;k++)
{
if(tmp>(DP(i,k)+DP(k,j)+a[j]-a[i]))
{
tmp=DP(i,k)+DP(k,j)+a[j]-a[i];
}
}
dp[i][j]=tmp;
return tmp;
}
}
}
int main()
{
int i,j,k,l,m;
for(;;)
{
memset(dp,-1,sizeof(dp));
scanf("%d",&l);
if(l==0)
break;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
a[0]=0;a[n+1]=l;
printf("The minimum cutting is %d.\n",DP(0,n+1));
}
return 0;
}
uva 10003 切木棍
最新推荐文章于 2022-08-23 15:23:23 发布