首页 > 代码库 > HDU4927(Series 1)

HDU4927(Series 1)

题目地址:Series 1

 

题目大意:

        有一个序列A集合为{A1,A2.....An}。第0个序列为其本身,第一个序列为后一个减去前一个(例:A2-A1,A3-A2...An-An-1)以此类推,则第n-1个序列就一定为一个数。输出这个数。

 

解题思路:

       通过计算求出的这个数ans=aA1+a2A2..anAn。  则前面的系数为杨辉三角里第n行的系数(二项式系数),从最后一个系数符号为正,一正一负一次往前类推。

处理大数问题,用java编写。

 

代码:

 1 import java.util.*; 2 import java.math.*; 3   4 public class Main 5 { 6     public static void main(String []args) 7     { 8         int n,i,j,T; 9         Scanner cin=new Scanner(System.in);  //声明输入。10         BigInteger p[]=new BigInteger[3005]; //声明大数数组11         T=cin.nextInt(); //输入T12         while(T!=0)13         {14             T--;15             n=cin.nextInt();//输入n16             BigInteger minn=BigInteger.valueOf(0),maxx=BigInteger.valueOf(0),c=BigInteger.valueOf(1),tmp,ans;//声明加上赋初值17          18             for(i=1; i<=n; i++)19                 p[i]=cin.nextBigInteger();20          21             for(i = 0; i<=n-1; i++)  //从0开始,为了计算杨辉三角的系数符号从最后一个为正开始。22             {23                 if(i>0) //除数不能为024                   {    25                       BigInteger xxx=BigInteger.valueOf(n-i);  //乘上分母的最大的一个数26                       c=c.multiply(xxx)/*相乘*/.divide/*相除*/(BigInteger.valueOf(i));//除去分子最小的一个数//通过计算出最后一个系数,依次计算出前一个的系数27                   }28                 tmp=c.multiply(p[n-i]);29                 if(i%2==1)30                     minn=minn.add(tmp);//相加31                 else32                     maxx=maxx.add(tmp);33             }34             maxx=maxx.subtract(minn); //正的值减去负数的值35             System.out.println(maxx.toString());//输出36         }37     }38 }
View Code