动态规划--数字三角形
上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和(路径上的每一步只可沿左斜线向下或右斜线向下走)。
第一行包括一个整数N,表示有N行,接下来输入数字三角形
输入例子:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出:
30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include<bits/stdc++.h> using namespace std; int main(){ int f[200][200]; int a[200][200]; int n; cin>>n; for ( int i=1;i<=n;i++){ for ( int j=1;j<=i;j++){ cin>>a[i][j]; } } for ( int i=1;i<=n;i++){ for ( int j=1;j<=i;j++){ f[i][j]=a[i][j]+max(f[i-1][j-1],f[i-1][j]); } } int m=f[n][1]; for ( int i=1;i<=n;i++){ if (m<f[n][i]){ m=f[n][i]; } } cout<<m; return 0; }<br> |
关键是:
利用数组进行类似递归的操作,用上一步的最大值来推下一步。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】