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]; // 加 }
查看全文
相关阅读:
Maven简介
Activiti核心API
Activiti数据库支持
使用idea进行activiti工作流开发入门学习
Activiti 工作流
枚举其他用法
枚举类的基本使用
kotlin中抽象类
kotlin中接口
kotlin 类的继承
原文地址:https://www.cnblogs.com/jjtx/p/2533496.html
最新文章
Git 分支管理
Git 基本操作
Git 创建仓库
Git 工作区、暂存区和版本库
Git 工作流程
CXF框架构建和开发 Services
WebService技术规则
Web Service 实例基于Socket创建Web服务
Web Services 平台元素
为什么使用 Web Services?
热门文章
Web Services 简介
Maven IntelliJ
Maven 引入外部依赖
Maven 插件
Maven 仓库
Maven 构建配置文件
Maven 构建生命周期
POM 标签大全详解
Maven之POM
Maven 环境配置
Copyright © 2011-2022 走看看