问题描述
问题分析
经典dp问题
从下面向上有
$dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1])$
所以最后结果就会是$dp[0][0]$
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| #include<stdio.h>
#include<algorithm>
using namespace std;
int map[352][352];
int main() {
int n;
while(scanf("%d",&n)!=EOF) {
for(int i=0; i<n; i++)
for(int j=0; j<=i; j++)
scanf("%d",&map[i][j]);
if(n==1) {
printf("%d\n",map[0][0]);
continue;
}
for(int i=n-2; i>=0; i--) {
for(int j=0; j<=i; j++) {
map[i][j]+=max(map[i+1][j],map[i+1][j+1]);
}
}
printf("%d\n",map[0][0]);
}
return 0;
}
|