标签:int 最佳 num 加号 加法 INF include 1005 表达式
首先子问题是啥??其实就是要找最右边的加号。上面这段其实就体现了这个子问题。
解题思路:
把在n个数字中插入m个加号的问题化为前i个数字中插入m-1个加号再加上从第i+1个数到第n个数字所组成的数。i的范围是从m一直到n-1,这个范围内取最小值。
这个预处理其实也就是把num二维数组给预处理算出来。
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int INF = 99999999; 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(~scanf("%d%d",&n,&m)) { for(int i = 1;i <= n;i++) scanf("%d",&a[i]); //预处理,计算i到j数字串组成的数字 for(int i = 1;i <= n;i++) { num[i][i] = a[i];//只有一个数字,注意num里面两个参数的关系是范围。 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; }
标签:int,最佳,num,加号,加法,INF,include,1005,表达式 来源: https://www.cnblogs.com/chengzhangpeideboke/p/15872385.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。