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 }

 

目录
相关文章
|
6月前
|
Java
HDU-4552-怪盗基德的挑战书
HDU-4552-怪盗基德的挑战书
39 0
|
Java 文件存储
hdu1128 Self Numbers
hdu1128 Self Numbers
35 0
|
Java 人工智能
|
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}.
837 0
|
机器学习/深度学习
hdu1059Dividing
题意:有6种石头,价值分别是1,2,3,4,5,6   每种有若干,作为输入数据。问能否把这些石头按照价值均分? 分析:多重背包问题。 代码: View Code 1 #include 2 #include 3 #include 4 using namespace...
870 0