动态规划 DP
来源:互联网 发布:淘宝精品服饰广告案例 编辑:程序博客网 时间:2024/06/02 05:52
数字三角形(POJ1163)
在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。 三角形的行数大于1小于等于100,数字为 0 - 99
输入格式:
5 //表示三角形的行数 接下来输入三角形
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
要求输出最大和
思路嘛。从倒数第二排往前 每个maxS[i][j]都存放到i,j这个位置最大的值
#include <iostream>using namespace std;int maxS[102][102];int D[111][111];int n;int max(int a, int b){if (a > b)return a;return b;}int maxSum(int i, int j);int maxSum(int i, int j)//这个是简版递归{
//maxS是存放当前位置的最大值,被初始化为-1if (maxS[i][j] != -1)//访问1 1这个元素 肯定是-1 于是就算开启递归 return maxS[i][j];if (i==n){maxS[i][j] = D[i][j];}else{maxS[i][j] = max(maxSum(i+1,j), maxSum(i+1,j+1)) + D[i][j];}return maxS[i][j];}int main(){cin >> n; /* for (int i = 1; i <= n; i++)for (int j = 1; j <= i;j++){cin >> D[i][j];maxS[ i][j] = -1;}cout << maxSum(1, 1);*/
//这上面是递归
for (int i = 1; i <= n; i++)for (int j = 1; j <= i; j++){cin >> D[i][j];}for (int i = n - 1; i >= 1; i--)for (int j = 1; j <= n; j++){D[i][j] = max(D[i + 1][j], D[i + 1][j + 1])+D[i][j];
//这个是不用创建数组,直接把D[i][j]修改了,省空间。
}cout << D[1][1];system("pause");}
0 0
- 动态规划DP
- 动态规划(DP)
- Hilary动态规划DP
- POJ2192Zipper动态规划DP
- DP动态规划
- DP专辑 动态规划
- DP---动态规划
- 动态规划DP原理
- 动态规划(DP)
- SGU116 动态规划 DP
- DP 动态规划
- HDU1203-动态规划DP
- 动态规划-dp
- DP(动态规划) PPT
- 动态规划DP
- 【dp动态规划总结】
- 动态规划(DP)算法
- 动态规划DP
- stanford-segmenter中文分词基本使用
- jdbc释放连接
- Shell脚本的基本知识
- JavaScript Dom编程艺术 阅读笔记
- 迷宫问题 POJ - 3984
- 动态规划 DP
- html中隐藏域hidden的作用
- 学习笔记---main函数参数-动态存储管理与动态数组
- 汇编语言(王爽) 一
- js学习笔记
- 【t030】数字构造
- 【Python】URL深度采集+源码分析
- Git使用操作
- 博为峰Java技术文章 ——JavaSE Swing JScrollPane滚动条容器I