题目:
有形如图所示的一个数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的数值和最大。
解决方法:
利用备忘录算法,其实其中选择方式则是贪心选择,用图像的方式解决,用图解的方式举例。
能够得出最优解。
c++代码如下:
```cpp
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a[101];
int t;
int i=0;
while(~scanf("%d",&t)){
a[i]=t;
i++;
}
int n=i;
int c=2;;
for(t=1;t<n;){
t += c;
c++;
}
for(i=n;i<t;i++){
a[i]=0;
}
for(i=0;i<t;i++){
cout<<a[i]<<" ";
}
cout<<endl;
c--;
int m=0;
for(i=t-1;i>0;i--){
// cout<<"±È½Ï"<<a[i]<<"ºÍ"<<a[i-1]<<endl;
if(a[i-c]+a[i]>a[i-c]+a[i-1]){
a[i-c]+=a[i];
}
else{
a[i-c]+=a[i-1];
}
m++;
if(m==c-1){
c--;
i--;
m=0;
// for(int f=0;f<t;f++){
// cout<<a[f]<<" ";
// }
// cout<<endl;
}
}
for(int f=0;f<t;f++){
cout<<a[f]<<" ";
}
cout<<endl;
cout<<endl;
}