zoukankan
html css js c++ java
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]; // 加 }
查看全文
相关阅读:
Redis 设计与实现 2:Redis 对象 redisObject
Redis 设计与实现 1:数据库 redisDb
KafkaProducer 简析
G1 收集器
KafkaMirrorMaker 的不足以及一些改进
Redis 数据结构与对象编码 (Object Encoding)
跨境 TCP 传输优化实录 — 使用 BBR 解决 LFN 问题
TCP 协议简析
使用模拟退火算法优化 Hash 函数
LSM-Tree 与 B-Tree
原文地址:https://www.cnblogs.com/jjtx/p/2533496.html
最新文章
vueX的使用
vue页面缓存
nginx代理路径配置总结
HBase客户端避坑指南
dcoker入门整理
HBase 多租户隔离技术:RegionServer Group 介绍及实战
HBase性能测试
为什么需要服务注册和发现?
如何理解 RPC 远程服务调用?
Amazon Athena学习笔记
热门文章
Flink Async I/O
Flink on Yarn原理剖析及实践
Redis 设计与实现 10:五大数据类型之有序集合
Redis 设计与实现 9:五大数据类型之集合
Redis 设计与实现 8:五大数据类型之哈希
Redis 设计与实现 7:五大数据类型之列表
Redis 设计与实现 6:五大数据类型之字符串
Redis 设计与实现 5:压缩列表 ziplist
Redis 设计与实现 4:字典 dict
Redis 设计与实现 3:字符串 SDS
Copyright © 2011-2022 走看看