Пример #1
0
    public static void MaxPalindromeInTableMain()
    {
        string[] tokens_n = "3 4".Split(' ');
        int      n        = Convert.ToInt32(tokens_n[0]);
        int      m        = Convert.ToInt32(tokens_n[1]);

        int[][] table = new int[n][];

        string[] table_temp = "8 2 1 9".Split(' ');
        table[0]   = Array.ConvertAll(table_temp, Int32.Parse);
        table_temp = "8 1 2 8".Split(' ');
        table[1]   = Array.ConvertAll(table_temp, Int32.Parse);
        table_temp = "8 2 1 8".Split(' ');
        table[2]   = Array.ConvertAll(table_temp, Int32.Parse);

        int[][] palindromeSize = new int[n][];
        for (int i = 0; i < n; i++)
        {
            palindromeSize[i] = new int[m];
        }

        int            MaxSize       = 0;
        PalindromeInfo maxPalindrome = new PalindromeInfo();

        maxPalindrome.palindromeSize = 1;
        for (int i = n - 1; i >= 0; i--)
        {
            for (int j = m - 1; j >= 0; j--)
            {
                if (maxPalindrome.palindromeSize < (i + 1) * (j + 1))
                {
                    PalindromeInfo palInfo = CountPalindrome(table, palindromeSize, i, j, maxPalindrome.palindromeSize);
                    if (maxPalindrome.palindromeSize < palInfo.palindromeSize)
                    {
                        maxPalindrome = palInfo;
                    }
                }
            }
        }
        Console.WriteLine(maxPalindrome.palindromeSize);
        Console.WriteLine(maxPalindrome.leftStart + " " + maxPalindrome.rightStart + " " + maxPalindrome.left + " " + maxPalindrome.rgtbtm);
    }
Пример #2
0
    static PalindromeInfo CountPalindrome(int[][] table, int[][] palindromeSize, int left, int rgtbtm, int maxPalindromeSize)
    {
        if (left == 0 && rgtbtm == 0)
        {
            PalindromeInfo palInfo1 = new PalindromeInfo();
            palInfo1.palindromeSize = 1;
            palInfo1.leftStart      = 0;
            palInfo1.rightStart     = 0;
            palInfo1.left           = left;
            palInfo1.rgtbtm         = rgtbtm;
            return(palInfo1);
        }

        PalindromeInfo palInfo = new PalindromeInfo();

        palInfo.palindromeSize = maxPalindromeSize;
        for (int i = 0; i <= left; i++)
        {
            for (int j = 0; j <= rgtbtm; j++)
            {
                if ((palInfo.palindromeSize < (left - i + 1) * (rgtbtm - j + 1)) && isPalindrome(table, i, j, left, rgtbtm))
                {
                    int size = (left - i + 1) * (rgtbtm - j + 1);
                    if (size > palInfo.palindromeSize)
                    {
                        palInfo.palindromeSize = size;
                        palInfo.leftStart      = i;
                        palInfo.rightStart     = j;
                        palInfo.left           = left;
                        palInfo.rgtbtm         = rgtbtm;
                        //return palInfo;
                    }
                }
            }
        }
        return(palInfo);
    }