C#,栅栏油漆算法(Painting Fence Algorithm)的源代码

1 刷油漆问题

给定一个有n根柱子和k种颜色的围栏,找出油漆围栏的方法,使最多两个相邻的柱子具有相同的颜色。因为答案可以是大的,所以返回10^9+7的模。

计算结果:

C#,栅栏油漆算法(Painting Fence Algorithm)的源代码_第1张图片

2 栅栏油漆算法的源程序

using System;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Number_Sequence
    {
        public static long Painting_Fence_Number(int n, int k)
        {
            long[] dp = new long[n + 1];
            int mod = 1000000007;
            dp[1] = k;

            int same = 0;
            int diff = k;

            for (int i = 2; i <= n; i++)
            {
                same = diff;

                diff = (int)(dp[i - 1] * (k - 1));
                diff = diff % mod;

                dp[i] = (same + diff) % mod;
            }

            return dp[n];
        }

        public static long Painting_Fence_Number_Second(int n, int k)
        {
            long total = k;
            int mod = 1000000007;

            long same = 0;
            long diff = k;

            for (int i = 2; i <= n; i++)
            {
                same = diff;

                diff = total * (k - 1);
                diff = diff % mod;

                total = (same + diff) % mod;
            }

            return total;
        }
    }
}
 

——————————————————

POWER BY TRUFFER.CN

3 代码格式

using System;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Number_Sequence
    {
        public static long Painting_Fence_Number(int n, int k)
        {
            long[] dp = new long[n + 1];
            int mod = 1000000007;
            dp[1] = k;

            int same = 0;
            int diff = k;

            for (int i = 2; i <= n; i++)
            {
                same = diff;

                diff = (int)(dp[i - 1] * (k - 1));
                diff = diff % mod;

                dp[i] = (same + diff) % mod;
            }

            return dp[n];
        }

        public static long Painting_Fence_Number_Second(int n, int k)
        {
            long total = k;
            int mod = 1000000007;

            long same = 0;
            long diff = k;

            for (int i = 2; i <= n; i++)
            {
                same = diff;

                diff = total * (k - 1);
                diff = diff % mod;

                total = (same + diff) % mod;
            }

            return total;
        }
    }
}

你可能感兴趣的:(C#算法演义,Algorithm,Recipes,c#,算法)