hdu2084数塔

经典问题了,题意我就不叙述了(题目是中文的~)

分析:dp[i][j]表示在第i行第j个位置上能取得的最大和,那么要从最后一行开始算起,到塔顶结束:dp[i][j] = a[i][j]+max(dp[i+1][j], dp[i+1][j+1]), 边界条件是dp[n][j] = a[n][j];

代码:

View Code

 1 #include <stdio.h>
 2 #include <iostream>
 3 using namespace std;
 4 #define DEBUG
 5 const int MAXN = 100 + 5;
 6 int a[MAXN][MAXN], dp[MAXN][MAXN];
 7 int max(int a, int b){
 8     return a>b?a:b;
 9 }
10 int main(){
11 #ifndef DEBUG
12     freopen("in.txt", "r", stdin);
13 #endif
14     int cas;
15     scanf("%d", &cas);
16     while(cas--){
17         int n;
18         scanf("%d", &n);
19         int i, j;
20         for(i=1; i<=n; i++)
21             for(j=1; j<=i; j++)
22                 scanf("%d", &a[i][j]);
23         for(j=1; j<=n; j++) dp[n][j] = a[n][j];
24         for(i=n-1; i>=1; i--)
25             for(j=1; j<=n; j++)
26                 dp[i][j] = a[i][j] + max(dp[i+1][j], dp[i+1][j+1]);
27         printf("%d\n", dp[1][1]);
28     }
29     return 0;
30 }

 

时间: 2024-09-18 22:26:22

hdu2084数塔的相关文章

hdu2084 数塔【简单DP】

数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 17241 Accepted Submission(s): 10340 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉

求教!简单的ACM数塔问题,出现Runtime Error(ACCESS_VIOLATION)

问题描述 求教!简单的ACM数塔问题,出现Runtime Error(ACCESS_VIOLATION) 以下是代码,自己编译运行是对的 #include<stdio.h> int max(int a,int b) { if(a>b) return a; else return b; } int main() { int c,n,i,j; int a[100][100]; int b[100][100]; scanf("%d",&c); while(c--)

hdu 2084 数塔

http://acm.hdu.edu.cn/showproblem.php?pid=2084 每个数的dp值 7 10 15 18 16 15 20 25 20 19 24 30 27 26 24 这是经典的dp #include <iostream> #include <cstdio> #include <cstring> using namespace std; int data[105][105]; int dp[105][105];//记一下dp值 int ma

五大常用算法 之 动态规划法

一.基本概念     动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划.     动态规划是运筹学中用于求解决策过程中的最优化数学方法.当然,我们在这里关注的是作为一种算法设计技术,作为一种使用多阶段决策过程最优的通用方法.它是应用数学中用于解决某类最优化问题的重要工具.     如果问题是由交叠的子问题所构成,我们就可以用动态规划技术来解决它,一般来说,这样的子问题出现在对给定问题求解

【DP专辑】ACM动态规划总结

转载请注明出处,谢谢.   http://blog.csdn.net/cc_again?viewmode=list          ----------  Accagain  2014年5月15日 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力.建模抽象能力.灵活度. 本人动态规划博客地址:http://blog.csdn.net/cc_again/article/category/1261899 ******************

算法训练-动态规划基础

WIKIOI-1220 数字三角形 题目描述如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走, 一直走到底层,要求找出一条路径,使路径上的值最大.        7      3   8    8   1   0  2   7   4   4输入描述 Input Description 第一行是数塔层数N(1<=N<=100). 第二行起,按数塔图形,有一个或多个的整数,表示该层节点的值,共有N行. 输出描述 Output Description 输出最大值. 样例输入 S

printf-c语言的一道题 动态规划 新手,求大神看看我代码的问题

问题描述 c语言的一道题 动态规划 新手,求大神看看我代码的问题 描述 7 3 8 8 1 0 2 7 4 4 4 5 6 2 5 (图1) 图1显示了一个三角形数. 编写一个程序,计算最高金额的数字传递路线,从顶部开始和结束的地方固定在底座上. 每一步可以走斜向下向左或向右斜下. 输入 程序从标准输入读取. 第一行包含一个整数N:三角形的行数. 以下N行描述三角形的数据. 在三角形的行数> 1但< = 100. 三角形的数量,所有的整数,在0到99之间. 输出 你的程序是编写到标准输出. 最

杭电ACM 2000-&amp;gt;2099 100道题 详细解题报告出炉

我去年暑假花了5天,把杭电ACM网站上2000到2099这100道题全AC了,又花了10来天精心写解题报告.里面包括题目.解题思路.编程技巧以及参考源码.所有代码都是使用C/C++写的. 最近整理资料时无意间发现,打包成chm文件和大家分享.我已经上传到CSDN上了.下载地址:http://download.csdn.net/source/492194 也可到我的Google Sites上下载. 题号 题名 题号 题名 2000 ASCII码排序 2001 计算两点间的距离 2002 计算球体积

HDOJ 1176

免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13077 Accepted Submission(s): 4328 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内.馅