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]; // 加 }
查看全文
相关阅读:
JS刷新当前页面的几种方法总结
C#实现,C++实现,JS实现 阿拉伯数字金额转换为中文大写金额
SQL server 生成数据字典
jquery操作复选框(checkbox)的一些小技巧总结
HTML中的几种空格
C#几个经常用到的字符串截取
关于百度地图API和jqGrid踩到的坑
SQL常见问题积累
JS实用小函数 数据是否合法或存在 获取当前日期时间
vs2010 学习Silverlight学习笔记(13):数据与通信之WCF
原文地址:https://www.cnblogs.com/jjtx/p/2533496.html
最新文章
好书推荐 Beginning C# Objects
C#使用Panel实现窗体动态侧边栏
Win8快速查找已安装程序
项目为什么会失败
C#使用DllImport调用非托管的代码
好文转载—你的袜子还是干的吗?
元旦快乐
VC中的sizeof的用法总结
C语言之精华总结
Windows Live Writer Source Code plugin for SyntaxHighlighter测试
热门文章
MFC下OpenGL编程入门遇到的几个问题总结[1]
C/C++中产生随机数(rand,srand用法)
MFC下OpenGL编程有用的小代码片段
hdc和hwnd的区别
礼花设计编排仿真模拟总结
BSTR、LPSTR、LPWSTR、CString、VARIANT、COleVariant 、_variant_t、CComBSTR、_bstr_t
Trapcode的粒子系统操作摘录
POJ 动态规划题目列表
各大Oj平台介绍
POJ分类
Copyright © 2011-2022 走看看