#include<bits/stdc++.h>
using namespace std;
int a[1010];
int num[1010][1010];
int dp[1010][1010];
//数组长度大于1000000时定义在外面
int main()
{
int n,m;
while(cin>>n>>m)
{
for(int i=1;i<=n;i++)
cin>>a[i];
memset(num,0,sizeof(num));
//预处理
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];
}
memset(dp,0x3f,sizeof(dp)); //字节赋值
for(int i=1;i<=n;i++) //初始状态 dp
dp[0][i]=num[1][i];
for(int i=1;i<=m;i++) //n>=m+1
{
for(int j=i+1;j<=n;j++)
{
for(int k=i;k<j;k++)
dp[i][j]=min(dp[i][j],dp[i-1][k]+num[k+1][j]);
}
}
cout<<dp[m][n]<<endl;
}
return 0;
}
最佳加法表达式
最新推荐文章于 2020-10-28 13:34:04 发布