http://acm.pku.edu.cn/JudgeOnline/problem?id=1160

Код:
#include <iostream>
using   namespace  std;

int  p[301][301];
int  q[301][31];
int  a[301];

int  main()
{
     int  V, P;
     int  i, j, k, l;
     int  t[301];
     int  tmp;
    scanf( "%d%d" ,  & V,  & P);
    
     for  (i = 1 ; i <= V; i ++ )
        scanf( "%d" ,  & a[i]);
    
     for  (i = 1 ; i <= V; i ++ )
         for  (j = i; j <= V; j ++ )
         {
             if  (i  ==  j)
                p[i][j]  =   0 ;
             else
             {
                l  =  (i  +  j)  /   2 ;
                p[i][j]  =   0 ;
                 for  (k = i; k <= l; k ++ )
                    p[i][j]  +=  a[l]  -  a[k];
                 for  (k = l + 1 ; k <= j; k ++ )
                    p[i][j]  +=  a[k]  -  a[l];
               
            }
        }
        
    memset(q,  0 ,  sizeof (q));
     for  (i = 1 ; i <= V; i ++ )
         for  (j = 1 ; j <= P; j ++ )
         {
             if  (j  ==   1 )
                q[i][j]  =  p[ 1 ][i];
             else
             {
                 if  (i  >=  j)
                 {
                    q[i][j]  =  q[j - 1 ][j - 1 ]  +  p[j][i];
                     for  (k = j; k < i; k ++ )
                     {
                         if  (q[i][j]  >  q[k][j - 1 ]  +  p[k + 1 ][i])
                            q[i][j]  =  q[k][j - 1 ]  +  p[k + 1 ][i];
                    }
                }
            }
        }
        
  cout  <<  q[V][P]  <<  endl;
  system("pause");
  return   0 ;
}