|
本帖最后由 红小豆 于 2024-8-5 15:00 编辑
迭代的是人,递归的是神
题目传送门
考虑递归+记忆化
边界条件:层数 = n
记忆化的无用数据:0
状态方程:max(f(x + 1,y),f(x + 1,y)) + a[x][y]
- #include <iostream>
- using namespace std;
- int a[1005][1005],n,b[1005][1005];
- int f(int x,int y){
- if (b[x][y] != 0) return b[x][y];
- if (x == n) return a[x][y];
- return b[x][y] = max(f(x + 1,y),f(x + 1,y + 1)) + a[x][y];
- }
- int main(){
- cin >> n;
- for (int i = 1;i <= n;i++){
- for (int j = 1;j <= i;j++){
- cin >> a[i][j];
- }
- }
- cout << f(1,1);
- return 0;
- }
复制代码
|
|