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]; ...

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

分析: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 }

 

目录
相关文章
|
3月前
|
Java 测试技术
hdu 1228 A + B
hdu 1228 A + B
19 0
|
6月前
|
Java
hdu 2503 a/b + c/d
hdu 2503 a/b + c/d
26 0
|
机器学习/深度学习 Java 算法
|
人工智能 Java 安全
HDU 1039 Easier Done Than Said?
Easier Done Than Said? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12751    Accepted Subm...
782 0
|
Java BI
HDU 1412 {A} + {B}
{A} + {B} Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 19833    Accepted Submission(s): 8245 Problem Description 给你两个集合,要求{A} + {B}.
810 0
|
机器学习/深度学习