HDU 2084 数塔
来源:互联网 发布:如何规划高中知乎 编辑:程序博客网 时间:2024/06/05 11:35
本题可用递推法和递归法。
其状态转移方程为:dp[i][j] = num_of_power[i][j] + max(dp[i + 1][j], dp[i + 1][j + 1]);
1(递推法):
使用递推方式,从数塔底部往上推,关键是要注意边界和计算的顺序。
Time:46MS Memory:1656K
代码如下:
#include <iostream>#include <algorithm>#include <cstring>using namespace std;int num_of_power[105][105];int dp[105][105];int n;int main() {int c;int maxnum;scanf("%d", &c);while (c--) {scanf("%d", &n);for (int i = 0; i <n; i++)for (int j = 0; j <=i; j++)scanf("%d", &num_of_power[i][j]);for (int j = 0; j < n; j++) dp[n-1][j] = num_of_power[n-1][j];for (int i = n - 2; i >= 0; i--)for (int j = 0; j <= i; j++)dp[i][j] = num_of_power[i][j] + max(dp[i + 1][j], dp[i + 1][j + 1]);printf("%d\n", dp[0][0]); }return 0;}
2.(递归法):
关键点还是要注意边界,还需要用上记忆化搜索,代码为if (dp[i][j] > 0) return dp[i][j];这样可以避免走重复的结点。
Time:62MS Memory:1656K
代码如下:
#include <iostream>#include <algorithm>#include <cstring>using namespace std;int num_of_power[105][105];int dp[105][105];int n;int solve(int i, int j) {if (dp[i][j] > 0) return dp[i][j];return dp[i][j] = num_of_power[i][j] + (i == n ? 0 : max(solve(i + 1, j), solve(i + 1, j + 1)));}int main() {int c;scanf("%d", &c);while (c--) {scanf("%d", &n);for (int i = 0; i <n; i++)for (int j = 0; j <= i; j++)scanf("%d", &num_of_power[i][j]);memset(dp, -1, sizeof(dp));int maxnum = solve(0, 0);printf("%d\n", maxnum);}return 0;}
2 0
- HDU 2084 数塔
- hdu 2084 数塔
- hdu 2084 数塔
- hdu 2084 数塔
- hdu 2084 数塔
- HDU 2084 数塔
- hdu 2084 数塔
- HDU 2084 数塔
- HDU 2084 数塔
- hdu 2084 数塔
- hdu 2084 数塔
- HDU 2084(数塔)
- HDU 2084 数塔
- HDU-2084数塔
- HDU 2084 数塔
- hdu 2084 数塔
- hdu--2084--数塔
- HDU 2084 数塔
- 为什么用dubbo
- NYOJ 106 背包问题
- (OK) 编译cBPM-CentOS7-codeblocks
- TCP/IP协议族
- Android 动画之TranslateAnimation应用详解(位移动画效果 )(转载)
- HDU 2084 数塔
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- JavaScript 数组
- (OK) cBPM(段错误(吐核))—((EndWorkflowEvent*)evt)->getProcessID()—getenv 返NULL
- 台大机器学习笔记(12-16)——Nonlinear Transformation&Tips
- Java_Hql_Query_Basic
- 排列组合 用递归
- JavaScript生成不重复随机数
- Android开发颜色代码大全