HDU 2084 数塔 --- 入门DP
2015-12-27 04:55
337 查看
HDU 2084 数塔
从下往上递推,状态转移方程 dp[i][j] = max( dp[i+1][j], dp[i+1][j+1]) + a[i][j];
View Code
从下往上递推,状态转移方程 dp[i][j] = max( dp[i+1][j], dp[i+1][j+1]) + a[i][j];
/* HDU 2084 数塔 --- 入门DP */ #include <cstdio> const int N = 105; int dp ; int MAX(int a, int b){ return a > b ? a : b; } int main() { #ifdef _LOCAL freopen("D:\\input.txt", "r", stdin); #endif int t; scanf("%d", &t); while (t--){ int n; scanf("%d", &n); for (int i = 1; i <= n; ++i){ for (int j = 1; j <= i; ++j){ scanf("%d", &dp[i][j]); } } ////dp[i][j]记录从底部往上走到i,j的最大路径,最终结果和即dp[1][1]即为最长的路径 //for (int i = 1; i <= n; ++i){ // //最后一行的dp初始化为a[i][j]本身的值; // dp [i] = a [i]; //} //状态转移方程: dp[i][j] = max(d[i+1][j] + dp[i+1][j+1]) + a[i][j] //即到达下一行的两个邻接点的最大值加上该点的值即为该点的最大值. for (int i = n - 1; i > 0; --i){ //第i行有i个数,从下往上走, for (int j = 1; j <= i; ++j){ dp[i][j] = MAX(dp[i + 1][j], dp[i + 1][j + 1]) + dp[i][j]; //直接使用dp[i][j]可以省去一个数组的值 //dp[i][j] = MAX(dp[i + 1][j], dp[i + 1][j + 1]) + a[i][j]; } } //从下往上递推可以省去最后一循环找最大值而直接去dp[1][1] printf("%d\n", dp[1][1]); } return 0; }
View Code
相关文章推荐
- make与Makefile提要
- Leetcode-39.Combination Sum
- iOS objc在simulator-x86_64体系下一般传参方式
- 拦截器示例之日志记录
- Maven with Scala
- scala + intellij idea 环境搭建及编译、打包
- nginx 安装手记
- HDU 2082 找单词 --- 母函数
- 如何正确看待手机的续航
- 陈坤:一个贫穷而美貌的男人在这世上可能遭遇什么
- Scrum Meeting 14-20151227
- centos7图形配置 firewall-config
- centos7图形配置 firewall-config
- CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段
- 网页全栈工程师要点分析
- java使用jUnit,jMockit,dbunit做DAO层单元测试方法
- 拦截器与过滤器的区别
- Junit测试编程
- 在Activity之间使用Intent传值和Bundle传值的区别和方式
- 连京东都开始卖翻新机,教你识别手中的iPhone 隐藏id