runxinzhi.com
首页
百度搜索
POJ 1163题 数字三角形问题(动态规划)
http://poj.org/problem?id=1163
1、普通递归
#include <iostream> #include <cstring> #include <cstdio> using namespace std; #define __max(a,b) (((a) > (b)) ? (a) : (b)) #define MAXNUM 101 int N; int aMax[MAXNUM][MAXNUM]; // aMax is memorandum int matrix[MAXNUM][MAXNUM]; int Max(int i, int j) { if (i == N) return matrix[i][j]; return __max( Max(i + 1, j), Max(i + 1, j + 1) ) + matrix[i][j]; } void Input(int _matrix[MAXNUM][MAXNUM]) // the 2nd dimension must be given! { for (int i = 1; i <= N; i++) { for (int j = 1; j <= i; j++) cin >> _matrix[i][j]; } } int main(void) { freopen("cin.txt", "r", stdin); cin >> N; memset(aMax, -1, sizeof(aMax)); // 0xff memset(matrix, -1, sizeof(matrix)); Input(matrix); cout << Max(1, 1) << endl; return 0; }
2、记忆式搜索 (动态规划)
int Max(int i, int j) { if (i == N) return matrix[i][j]; if (aMax[i + 1][j] == -1) aMax[i + 1][j] = Max(i + 1, j); if (aMax[i + 1][j + 1] == -1) aMax[i + 1][j + 1] = Max(i + 1, j + 1); return __max( aMax[i + 1][j], aMax[i + 1][j + 1] ) + matrix[i][j]; }
3、方法2的代码优化
int Max(int i, int j) { if (i == N) return matrix[i][j]; if (aMax[i][j] == -1) // 在普通递归的程序中加上 aMax[i][j] = __max( Max(i + 1, j), Max(i + 1, j + 1) ) + matrix[i][j]; // 改 return aMax[i][j]; // 加 }
相关阅读:
麻省理工公开课:线性代数 第4课 A的LU分解
麻省理工公开课:线性代数 第3课 乘法和逆矩阵
麻省理工公开课:线性代数 第2课 矩阵消元
麻省理工公开课:线性代数 第1课 方程组的几何解释
线性代数导论(一)向量介绍
鸟哥的linux私房菜——第6章 Linux的文件权限与目录配置
Python学习(七)数组读写和保存
Python学习(六)向量化
Python学习(五)Numpy通用函数汇总
Python学习(四)数组和矩阵
原文地址:https://www.cnblogs.com/jjtx/p/2533496.html
最新文章
爬虫-requests模块
爬虫-基本原理
Mysql-多表查询
Django-进阶之路--信号
Flask之wtforms源码分析
Flask之flask-script模块使用
Flask之flask-session
Web框架简介
Flask之WTForms
Flask之初体验
热门文章
《区块链100问》第14集:各国对待区块链资产大不同
《区块链100问》第15集:比特币怎么转账?
《区块链100问》第16集:比特币转账需要手续费
《区块链100问》第17集:区块链转账按字节收费?
《区块链100问》第18集:比特币地址是什么?
《区块链100问》第19集:比特币节点是什么?
《区块链100问》第20集:从发出交易到矿工打包
《区块链100问》第21集:比特币的数字签名
《区块链100问》第22集:比特币交易和找零机制
《区块链100问》第23集:挖矿是什么?
Copyright © 2020-2023
润新知