//子问题:假定数字串长度是n 将一个加号添加在第i个数字后 整个式子的最小值等于在前i个数中插入m-1个加号所能形成的最小值加上第i+1到第n个数字所组成的数的值
// v(m,n)表示表达式的最小值
//m=0 n个数字的值
//n<m+1 v(m,n)=∞
//v(m,n)=min(v(m-1,i)+num(i+1,n))
#include <iostream>
#include <cmath>
using namespace std;
int a[1000], v[1000][1000];
int num(int x, int y){
int Num = 0, i, t;
t = y - x;
for( i = x; i <= y; i ++){
Num += a[i] * pow(10, t);
t--;
}
return Num;
}
int V(int m,int n)
{
int sum, i;
int t;
if(m == 0){
return num(1, n);
}
else if(n < m+1){
for( i = 1; i <= n; i ++){
sum += a[i];
}
return sum;
}
else
{
t = 1000;
for(int i = m;i <= n-1;i++)
t = min(t, V(m-1,i)+num(i + 1, n));//这里的递归没有搞懂
return t;
}
}
int main(int argc, const char * argv[]) {
int i, m, n, ans;
scanf("%d%d",&m, &n);
for( i = 1; i <= n; i ++){
scanf("%d", &a[i]);
}
for( i = 0; i < n; i ++){
v[0][i] = num(1, i);
}
ans = V(m, n);
printf("%d\n", ans);
return 0;
}