MOOC清华《程序设计基础》第6章第3题:最大乘积问题(递归法)
2017-07-26 21:04
253 查看
题目描述
在数字串“3215125”中插入3个乘号,使总的乘积最大,不可以在头和尾放乘号,也不可在任两个相邻数间放多于一个乘号。
例如第一种插入乘号的方案:32*15*12*5 = 28800
第二种插入乘号的方案:3*215*12*5 = 38700
请输出最大的乘积。
输入格式
无
输出格式
输出最大的乘积
样例输入
样例输出
![](https://img-blog.csdn.net/20170726210345877)
以上代码转载自清华大学出版社《程序设计基础》第三版第251——252页的代码。
在数字串“3215125”中插入3个乘号,使总的乘积最大,不可以在头和尾放乘号,也不可在任两个相邻数间放多于一个乘号。
例如第一种插入乘号的方案:32*15*12*5 = 28800
第二种插入乘号的方案:3*215*12*5 = 38700
请输出最大的乘积。
输入格式
无
输出格式
输出最大的乘积
样例输入
样例输出
28800
#include <iostream> #include <cstring> using namespace std; const int S = 3215125; int d[7][7]; int P(int l, int r, int k) { if(k == 0) return d[l][r]; int x, answer = 0; for(int q = l; q <= r - k; q++) { x = d[l][q] * P(q + 1, r, k - 1); if(x > answer) answer = x; } return answer; } int main() { memset(d, 0, sizeof(d)); //数组d置零 int sl, i, j; sl = 1000000; d[0][6] = S; for(i = 1; i <= 6; i++) { d[i][6] = d[i - 1][6] % sl; sl = sl / 10; } for(j = 5; j >= 0; j--) for(i = 0; i <= j; i++) { d[i][j] = d[i][j + 1] / 10; } cout << P(0, 6, 3) << endl; return 0; }
以上代码转载自清华大学出版社《程序设计基础》第三版第251——252页的代码。
相关文章推荐
- MOOC清华《程序设计基础》第6章第3题:最大乘积问题(动态规划)
- MOOC清华《程序设计基础》第6章:橱窗插花问题(递推法)
- MOOC清华《程序设计基础》第6章第2题:求f(a,b)问题(动态规划)
- MOOC清华《程序设计基础》第6章:三种递推方法求兔子数列问题(斐波那契数列)
- MOOC清华《程序设计基础》第6章:分鱼问题(从A到E递推)
- MOOC清华《程序设计基础》第6章:橱窗插花问题(动态规划,输出方法一)
- MOOC清华《程序设计基础》第6章:最长公共子序列问题(动态规划)
- MOOC清华《程序设计基础》第6章:橱窗插花问题(动态规划,输出方法二)
- MOOC清华《程序设计基础》第6章:橱窗插花问题(枚举法)
- MOOC清华《程序设计基础》第5章:八皇后问题-代码一
- MOOC清华《程序设计基础》第5章第3题:用递归算法求最大公约数
- MOOC清华《程序设计基础》第5章:N皇后问题(带矩阵输出)
- MOOC清华《程序设计基础》第5章:求n的阶乘(用递归法做)
- MOOC清华《程序设计基础》第5章:分书问题-代码一
- MOOC清华《程序设计基础》第1章第5题:银行存款问题
- MOOC清华《程序设计基础》第2章第3题:直角三角形求斜边
- MOOC清华《程序设计基础》第5章:八皇后问题-代码二
- MOOC清华《程序设计基础》期末考试第6题:鸡兔同笼问题
- MOOC清华《程序设计基础》第5章:分书问题-代码二
- MOOC清华《程序设计基础》第2章第5题:银行存款问题2