数字三角形-poj
题目要求:
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
在上面的数字三角形中寻找在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径。
三角形的行数大于1小于等于100,数字为 0 - 99
输入格式:
5 //三角形行数。下面是三角形
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
解题思路:
用二维数组存放数字三角形
D[r][j] //表示第i行第j个元素的数值;
MaxSum(i,j) //表示从根部到第i行最大路径的,所有数值的最大和;
用递归的思想,在D(i,j)位置,下一个能走的位置为D(i+1,j)和D(i+1,j+1),进行递归
MaxSum(i,j)=max(MaxSum(i+1,j),MaxSum(i+1,j+1))+D[i][j];
代码:
#include<iostream> #include<stdio.h> #include<string.h> #include <stdlib.h> using namespace std; int N; #define Max 100 int number[Max][Max]; int Maxnum(int x,int y){return x>y?x:y;} int Max_road_sum(int i,int j) { if(i==N) return number[i][j]; else { int num1=Max_road_sum(i+1,j); int num2=Max_road_sum(i+1,j+1); return Maxnum(num1,num2)+number[i][j]; } } int main() { int i,j; cin>>N; for(i=1;i<=N;i++) { for(j=1;j<=i;j++) cin>>number[i][j]; } cout<<Max_road_sum(1,1)<<endl; return 0; }
以大多数人努力程度之低,根本轮不到去拼天赋~