最佳加法表达式:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int INF=99999;
int a[1005],num[1005][1005];
int V(int m,int n)
{
if(m==0) return num[1][n];
else if(n<m+1) return INF;
else{
int t=INF;
for(int i=m;i<=n-1;i++)
t=min(t,V(m-1,i)+num[i+1][n]);
return t;
}
}
int main()
{
int n,m;
while(cin>>n>>m)
{
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
num[i][i]=a[i];
for(int j=i+1;j<=n;j++)
{
num[i][j]=num[i][j-1]*10+a[j];
}
}
cout<<V(m,n)<<endl;
}
return 0;
}
2539

被折叠的 条评论
为什么被折叠?



