1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 const int N=100; 5 int tower[N][N],f[N][N]={0},n; 6 void upMax(int &a,const int &b){ 7 a=(a>b?a:b); 8 } 9 int main(){ 10 cin>>n; 11 for(int i=1;i<=n;i++){ 12 for(int j=1;j<=i;j++){ 13 cin>>tower[i][j]; 14 } 15 } 16 //接下来 用贪心算法和动态规划 17 //这里用了贪心算法,每一步算出每一行的最大值,最后得到总体最大 18 for(int i=1;i<=n;i++){ 19 for(int j=1;j<=i;j++){ 20 upMax(f[i][j],max(f[i-1][j],f[i-1][j-1])+tower[i][j]); 21 } 22 } 23 int res=0; 24 for(int i=0;i<=n;i++){ 25 //cout<<f[n][i]<<endl; 26 upMax(res,f[n][i]); 27 } 28 cout<<res<<endl; 29 }
1.求出最大值函数,并将之返回给第一个参数,当然指针和引用都可以实现
2.贪心算法求出每一行的最大值:对于每一个位置,都可以求出上面所有的路径到达这点的最大值,存在f[i][j]中
3.比较最后一行的f[n][i],求出最大值就是结果
时间: 2024-10-13 03:30:53