#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
using namespace std;
int memcache[1004][1004];
int data[60];
int result;
bool state[1004];
int rekursi(int lb , int rb)
{
if(memcache[ data[lb] ][ data[rb] ] > 0)
{
return memcache[ data[lb] ][ data[rb] ];
}
if(rb - lb == 1)
{
return 0;
}
int i;
int end = -1;
int temp;
for(i = lb+1 ; i < rb ; ++i)
{
temp = rekursi(lb , i) + rekursi(i , rb);
if(temp < end || end < 0)
{
end = temp;
}
}
return memcache[ data[lb] ][ data[rb] ] = end + data[rb] - data[lb];
}
int main()
{
int n,L,i,t,j,temp;
while(scanf("%d" , &L) != EOF)
{
if(L == 0)
{
break;
}
for(i=0 ; i <= L ; ++i )
{
state = false;
for(j=0 ; j <= L ; ++j)
{
memcache[j] = 0;
}
}
scanf("%d" , &n);
data[0] = 0;
int counter = 1;
for(i=0 ; i < n ; ++i)
{
scanf("%d" , &temp);
if(state[temp] == false)
{
state[temp] = true;
data[counter++] = temp;
}
}
data[counter] = L;
int result;
if(n == 0)
{
result = L;
}
else
{
result = rekursi(0 , counter);
}
printf("The minimum cutting is %d.\n" , result);
}
return 0;
}
Thanks in advance
![:D](./images/smilies/icon_biggrin.gif)