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实现轮播图动画(更新"旋转木马")
封装简单动画函数-由简到完善
纯Css绘制三角形箭头三种方法
JS实现图片''推拉门''效果
一个基于 canvas 的画板
Python 控制台进度条的实现
Flask博客开发——Tinymce编辑器
Flask博客开发——登录验证码
用于水和水蒸汽物性计算的Python模块——iapws
原文地址:https://www.cnblogs.com/jjtx/p/2533496.html
最新文章
C# 获取时间差(天数)
WebApi和WebService功能特征与区别
mvc中枚举的使用和绑定枚举值到DropDownListFor
阿里Maven仓库镜像地址
idea 报错maven [ERROR] Maven execution terminated abnormally (exit code 1)
RGB颜色
设计模式的一些想法与总结(一)
MD5加密(C#)
2013总结以及2014目标
当你手头没有工作的时候你在做什么?
热门文章
正则表达式并没你想的那么难(二)
正则表达式并没你想的那么难(一)
三门概率问题之C#版
.net之XML
关于VS2010中一打字,换行,拖控件便出现卡死的问题的解决方案
不得不聊的关于方法的参数的那些事儿
C#中的结构体与类的区别
帝国cms 本地安装
读书笔记
sublime text(中文版)增加浏览器预览
Copyright © 2011-2022 走看看