用动态分配法解“传染问题”

来源:互联网 发布:淘宝店铺年度交易额 编辑:程序博客网 时间:2024/04/28 10:47

某种传染病第一天只有一个患者,前五天为潜伏期,不发作也不会传染人
第6天开始发作,从发作到治愈需要5天时间,期间每天传染3个人
求第N天共有多少患者


解题的思路是这样的:

1、1-5天,0个人被传染,6-10天有15个人(也就是一天3)

2、第11天,被传染的人数应该是从第2天到6天被传染的人数加乘3

3、第N天,被传染的人数是第N-9到N-9+4天人数的和乘3

4、所以我们只要把(1,N-1)每天被传染的人数保存此来就可以通过公式算出第N天人数,然后从1加到N。

 

public static long SickMen(long N)

        {

            long count = 0;

            long[] M = new long[N];

 

            if (N <= 5 && N > 0)

                return 1;

 

 

            for (long i = 5; i < 10; i++)

            {

                if (i < N)

                    M[i] = 3;

            }

 

            if (N >= 10)

            {

                for (long j = 10; j < N; j++)

                {

                    long temp = 0;

                    long length = j - 9;

                    for (long l = 0; l < 5; l++)

                        temp += M[length + l];                        

 

                    M[j] = temp * 3;

                }

            }

 

            for (long q = 0; q < N; q++)            

                count += M[q];               

 

            return count;

        }

 

原创粉丝点击