整数序列合并问题
2015-11-16 19:58
225 查看
#include <iostream> using namespace std; void show(int **s,int i,int j){ if(i==j) cout<<"A"<<i; else{ cout<<"("; show(s,i,s[i][j]); show(s,s[i][j]+1,j); cout<<")"; } } void answer(int *a,int n){ int **m = new int * ; for(int i=0;i<n;i++) m[i] = new int ; for(int i=0;i<n;i++) for(int j=0;j<n;j++) m[i][j] = -1; int **s = new int * ; for(int i=0;i<n;i++) s[i] = new int ; for(int i=0;i<n;i++) m[i][i] = a[i]; for(int l=1;l<n;l++){ for(int i=0;i<n-l;i++){ int j = i + l; m[i][j] = -1; for(int k=i;k<j;k++){ int p = (m[i][k] + m[k+1][j])*2; if(p>m[i][j]) { m[i][j] = p; s[i][j] = k; } } } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cout<<m[i][j]<<"\t"; cout<<endl; } show(s,0,n-1); for(int i=0;i<n;i++) delete s[i],m[i]; delete m,s; }
相关文章推荐
- C++动态规划之最长公子序列实例
- C++动态规划之背包问题解决方法
- C#使用动态规划解决0-1背包问题实例分析
- 动态规划
- C++ 动态规划
- DP(动态规划) 解游轮费用问题
- 动态规划的用法——01背包问题
- 动态规划的用法——01背包问题
- 《收集苹果》 动态规划入门
- 《DNA比对》蓝桥杯复赛试题
- 《背包问题》 动态规划
- 初学ACM - 半数集(Half Set)问题 NOJ 1010 / FOJ 1207
- 关于爬楼梯的动态规划算法
- 动态规划 --- hdu 1003 **
- DP问题各种模型的状态转移方程
- 0-1背包解题过程
- 背包问题
- USACO 3.2.2:Stringsobits
- 字符串编辑距离
- HDU ACM Step 2.2.2 Joseph(约瑟夫环问题)