码迷,mamicode.com
首页 > 编程语言 > 详细

51Nod一级算法1002数塔取数问题

时间:2017-11-10 00:26:49      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:clu   eof   malloc   输入   std   第一个   scan   数组   main   

---恢复内容开始---

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define max(x,y) ((x)>(y)?(x):(y))
 4 int main(){
 5     int n;
 6     int i,j,k;
 7     scanf("%d",&n);//层数
 8     k = (n+1)*n/2;//所有节点总数
 9     int *a = (int*) malloc(sizeof(int) * k);//动态数组,记录每个节点的数
10     for(i = 0; i < k; i++){//输入各个节点数
11         scanf("%d",&a[i]);
12     }
13     k -= n;//倒数第二层的第一个节点
14     for(i = k-1, j = 0; i>= 0 ; i--){
15         a[i] = a[i] + max(a[i+n],a[i+n-1]);//贪心,将下层的左or右节点的最大值加到自身
16         if(++j == n-1){//遍历完一层就n-1
17             n--;
18             j = 0;
19         }
20     }
21     printf("%d\n",a[0]);
22     return 0;
23 }

思路:从倒数第二行开始,每个节点的值加上它下一层的左右节点的最大值,然后逐层向上遍历,直到顶点,循环结束,输出顶点内容

---恢复内容结束---

51Nod一级算法1002数塔取数问题

标签:clu   eof   malloc   输入   std   第一个   scan   数组   main   

原文地址:http://www.cnblogs.com/luzhiliang/p/7811646.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!