maxSum[j] = max(dataArry[i+1][j], dataArry[i+1][j+1]) + dataArry[i][j];

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TriangleCalc
{
    class Program
    {
        int[][] dataArry = new int[5][];
        int[][] sumArry = new int[5][];
        int n=4; 

        public Program()
        {
            for (int i = 0; i < dataArry.Length; i++)
            {
                dataArry[i] = new int[i + 1];
            }
            dataArry[0][0]=7;
            dataArry[1][0]=3;dataArry[1][1]=8;
            dataArry[2][0]=8;dataArry[2][1]=1;dataArry[2][2]=0;
            dataArry[3][0]=2;dataArry[3][1]=7;dataArry[3][2]=4;dataArry[3][3]=4;
            dataArry[4][0]=4;dataArry[4][1]=5;dataArry[4][2]=2;dataArry[4][3]=6;dataArry[4][4]=6;
            dumpArray(dataArry);
            for (int i = 0; i < sumArry.Length; i++)
            {
                sumArry[i] = new int[i + 1];
            }
        }

        static void Main(string[] args)
        {
            Program prog = new Program();
            /*
            int i=0,j=0;
            prog.calcArray(prog.dataArry, i, j, 4, prog.dataArry[i][j]);
            Console.WriteLine("--------------------------------");
            int maxSum = prog.MaxSum(0, 0);
            Console.WriteLine("{0}", maxSum);
            */
            Console.WriteLine("--------------------------------");
            prog.calcMax();
            Console.WriteLine("--------------------------------");
        }

        void calcArray(int[][] dataArry, int i, int j, int max_line,int sum)
        {
            if (i==max_line)
            {
                Console.WriteLine("{0},{1}:{2}",i,j,sum);
                return;
            } 
            else
            {
                calcArray(dataArry, i+1, j, max_line, sum+dataArry[i+1][j]);
                calcArray(dataArry, i+1, j+1, max_line, sum+dataArry[i+1][j+1]);
            }
        }

        void dumpArray(int[][] dataArry)
        {
            for (int i = 0; i < dataArry.Length; i++)
            {
                int[] line = dataArry[i];
                for (int j = 0; j < line.Length; j++)
                {
                    Console.Write("{0},", line[j]);
                }
                Console.WriteLine();
            }

        }


  
   
        int MaxSum(int i, int j){
            if (i == n)
            {
                sumArry[i][j] = dataArry[i][j];
                return sumArry[i][j];
            } 
            sumArry[i+1][j] = MaxSum(i+1,j);
            sumArry[i + 1][j + 1] = MaxSum(i + 1, j + 1);
            sumArry[i][j]=max(sumArry[i+1][j], sumArry[i+1][j+1]) + dataArry[i][j]; 
            return sumArry[i][j];
        }

        void calcMax()
        {
            int[] maxSum = null; 
            for (int i = n - 1; i >= 0; --i)
            {
                maxSum = dataArry[i]; 
                for (int j = 0; j <=i; ++j)
                {
                    maxSum[j] = max(dataArry[i+1][j], dataArry[i+1][j+1]) + dataArry[i][j];
                }
            }
            Console.WriteLine("maxSum[0]:{0}", maxSum[0]);
            /*
            7,
            3,8,
            8,1,0,
            2,7,4,4,
            4,5,2,6,6,
            --------------------------------
            maxSum[0]:30
            --------------------------------
            请按任意键继续. . . 
             */
        }
   

        int max(int x, int y)
        {
            return x > y ? x : y;
        }


    }
}

 

posted @ 2018-02-01 14:46  sky20080101  阅读(74)  评论(0)    收藏  举报