From Admin ☆数字三角形 背景 Background 09年 USACO 11月月赛 铜牌第一道 描述 Description 示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。 每一步可沿左斜线向下或右斜线向下走; 1<三角形行数<25; 三角形中的数字为整数<1000; 输入格式 Input Format 第一行为N,表示有N行后面N行表示三角形每条路的路径权 输出格式 Output Format 路径所经过的数字的总和最大的答案 样例输入 Sample Input [复制数据] 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 样例输出 Sample Output [复制数据] 30 时间限制 Time Limitation 各个测试点1s 注释 Hint 搜索80分,记忆化搜索AC 动态规划基础题,不解释 #include<stdio.h> int map[26][26]; int maxsum[26][26]; int main() { int n; while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) scanf("%d",&map[i][j]); for(int j=1;j<=n;j++) maxsum[n][j]=map[n][j]; for(int i=n;i>1;i--) for(int j=1;j<i;j++) { if(maxsum[i][j]>maxsum[i][j+1]) maxsum[i-1][j]=maxsum[i][j]+map[i-1][j]; else maxsum[i-1][j]=maxsum[i][j+1]+map[i-1][j]; } printf("%d/n",maxsum[1][1]); } return 0; }