题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084
1.此题暴力解决会超时,需用动态规划,如果用递归的话,也回超时,所以需要在递归上改进一下。
2.用两个数组,一个叫奇数组,标号为a[1][],一个叫偶数组,为a[0][];第一次是奇数组存储读入的数,偶数组存储操作结果,第二次是偶数组存取读入数,奇数组存储操作结果,这样循环。
1 #include<Stdio.h> 2 #include<string.h> 3 #define MAX 101 4 #define max(a,b) (a>b?a:b) 5 int main() 6 { 7 int i,j,t,T,n; 8 int a[2][MAX]; 9 // freopen("1.txt","r",stdin); 10 scanf("%d",&T); 11 while(T--) 12 { 13 memset(a,0,sizeof(a)); 14 scanf("%d",&n); 15 for(i=1;i<=n;i++) 16 { 17 for(j=0;j<i;j++) scanf("%d",&a[i%2][j]); 18 t=a[i%2][0]; 19 for(j=0;j<i-1;j++) 20 { 21 a[i%2][j]=max(a[i%2][j],t+a[(i+1)%2][j]); 22 t=a[i%2][j+1]; 23 a[i%2][j+1]=max(a[i%2][j+1],t+a[(i+1)%2][j]); 24 } 25 } 26 t=0; 27 for(i=0;i<n;i++) 28 t=max(t,a[i%2][i]); 29 for(i=0;i<n;i++) 30 t=max(t,a[(i+1)%2][i]); 31 printf("%d\n",t); 32 } 33 return 0; 34 }