从新开始把每种算法题目搞一遍吧,DP中的经典题目,数字三角形,求出最大的和
用数组来存储,每次输入一行就往下叠加求出最大的num[i][j]+=max(num[i][j-1],num[i-1][j]);
第一次接触时候分老大劲儿才理解,现在顺手就写出....(自恋下)

1 #include <stdio.h>
2 #include <string.h>
3 #define MAX(a,b) (a)>(b)?(a):(b)
4 #define N 101
5 int num[N][N];
6 int main()
7 {
8 int n,max,i,j;
9 while(scanf("%d",&n)!=EOF)
10 {
11 memset(num,-1,sizeof(num));
12 max=-1;
13 for(i=1;i<=n;i++)
14 for(j=1;j<=i;j++)
15 {scanf("%d",&num[i][j]);
16 if(i!=1)num[i][j]+=MAX(num[i-1][j],num[i-1][j-1]);
17 //printf("max[%d][%d]=%d \n",i,j,num[i][j]);
18 if(i==n)if(num[i][j]>max)max=num[i][j];
19 }
20 printf("%d\n",max);
21 }
22
23 }