UVa10003

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     int m[100][100],l,n,a[100],c[100],i,j,r,sum;
 6     while(scanf("%d",&l)!=EOF&&l)
 7     {
 8         scanf("%d",&n);
 9         for(i=0;i<n;i++)
10         scanf("%d",&c[i]);
11         c[n]=l;a[0]=c[0];
12         for(i=1;i<=n;i++)
13         a[i]=c[i]-c[i-1];
14         memset(m,0,sizeof(m));
15         for(r=1;r<=n;r++)
16         for(i=0;i<n;i++)
17         {
18             j=i+r;sum=0;
19             for(int k=i;k<=j;k++)
20             sum+=a[k];
21             m[i][j]=m[i][i]+m[i+1][j]+sum;
22             for(int k = i+1;k<j;k++)
23             {
24                 int temp=m[i][k]+m[k+1][j]+sum;
25                 if(temp<m[i][j])
26                 {
27                     m[i][j]=temp;
28                 }
29             }
30         }
31         printf("The minimum cutting is %d.\n",m[0][n]);
32     }
33     return 0;
34 }

 

posted on 2013-07-16 17:21  Ac_国士无双  阅读(168)  评论(0编辑  收藏  举报