一个比较水的题,直接贴代码吧
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=50+5;
const int inf=55000;//long?
int len,n;
int d[maxn][maxn],a[maxn];
int main()
{
while(scanf("%d",&len)!=EOF)
{
if(len==0) break;
scanf("%d",&n);
a[0]=0,a[n+1]=len;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
// for(int i=0;i<=n+1;i++)
// printf("%d ",a[i]);
for(int i=0;i<=n+1;i++)
for(int j=0;j<=n+1;j++)
d[i][j]=inf;
for(int i=0;i<=n;i++)
d[i][i+1]=0;
// printf("\n");
for(int m=2;m<=n+1;m++)
{
for(int i=0;i+m<=n+1;i++)
{
int minnum=inf;
for(int k=i+1;k<i+m;k++)
minnum=min(d[i][k]+d[k][i+m],minnum);
d[i][i+m]=minnum+a[i+m]-a[i];
// printf("d[%d][%d]:%d ",i,i+m,d[i][i+m]);
}
// printf("\n");
}
printf("The minimum cutting is %d.\n",d[0][n+1]);
}
return 0;
}