MOOC清华《程序设计基础》第6章:橱窗插花问题(动态规划,输出方法二)
2017-07-20 17:12
337 查看
#include <iostream> using namespace std; int V = 5; int F = 3; int main() { //定义美感数组 int beauty[V][F] = {{7,5,-21}, {23,21,5}, {-5,-4,-4}, {-24,10,-20}, {16,23,20}}; //定义最大美感得分和、相应方案 int best_beauty = 0; //定义最优部分美感和数组,设定递推初值 int best_partial[V + 1][F + 1] = {{0}}; //注意二维数组的赋零值方法 //定义记录新花瓶是否插花的数组 bool put[V + 1][F + 1] = {{false}}; //输出方法二 //按 m 个花瓶插 n 朵花递推 for(int m = 1; m <= V; m++) for(int n = 1; n <= m && n <= F; n++) { //默认新花瓶插花更优 best_partial[m] = best_partial[m - 1][n - 1] + beauty[m - 1][n - 1]; put[m] = true; //输出方法二 if(n < m && best_partial[m] < best_partial[m - 1] ) //若新花瓶不插花更优 { best_partial[m] = best_partial[m - 1] ; put[m] = false; //输出方法二 } } //输出答案 cout << "最大美感得分和:" << best_partial[V][F] << endl; cout << "插花方法:"; for(int m = V, n = F; m >= 1; ) //输出方法二,这里是逆序输出,因为本题逆序计算量小 if(put[m] ) { cout << n; m--; n--; } else { cout << '0'; m--; } return 0; }
在用动态规划算法解题时,输出方式也要考虑进来,简洁的输出方案将省去一些函数,让代码更简单。这也是一种优化。
相关文章推荐
- MOOC清华《程序设计基础》第6章:橱窗插花问题(动态规划,输出方法一)
- MOOC清华《程序设计基础》第6章:橱窗插花问题(枚举法)
- MOOC清华《程序设计基础》第6章:橱窗插花问题(递推法)
- MOOC清华《程序设计基础》第6章:三种递推方法求兔子数列问题(斐波那契数列)
- MOOC清华《程序设计基础》第6章:分鱼问题(从A到E递推)
- MOOC清华《程序设计基础》第6章:最长公共子序列问题(动态规划)
- MOOC清华《程序设计基础》第6章第3题:最大乘积问题(递归法)
- MOOC清华《程序设计基础》第6章第2题:求f(a,b)问题(动态规划)
- MOOC清华《程序设计基础》第6章第3题:最大乘积问题(动态规划)
- MOOC清华《程序设计基础》第5章:N皇后问题(带矩阵输出)
- 砝码称重问题求解:动态规划与母函数方法
- MOOC清华《程序设计基础》第5章:八皇后问题-代码二
- 动态规划方法解旅行商问题(TSP Traveling Salesperson Problem)
- 动态规划-数塔路径之和最大值及路径输出问题
- MOOC清华《程序设计基础》第5章:分书问题-代码二
- MOOC清华《程序设计基础》第6章第1题:n级台阶问题(递推法)
- 动态规划;漂亮打印问题;时间复杂度O(n方); 思考方法记录在内;
- MOOC清华《程序设计基础》第5章:快速排序(不分配动态空间-算法一)
- MOOC清华《程序设计基础》第5章:快速排序(不分配动态空间-算法三)
- MOOC清华《程序设计基础》第5章:青蛙过河问题