poj 2515 差分序列,排列组合
生活随笔
收集整理的這篇文章主要介紹了
poj 2515 差分序列,排列组合
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
大神博客鏈接?http://blog.csdn.net/kksleric/article/details/8021276
這道題的差分序列從沒看過,公式題。
先構造從0到m的第p階差分序列,算出0^p,1^p,...,p^p,填入表的第一行;
然后前向差分,求出以下所有(p-1)~1階部分的差分表,差分表的最左邊一豎行記作C0、C1...Cp。
令C[n+1][1]=n,用遞推構造C[n+1][1]~C[n+1][p+1]的組合數打個一維表C[];
最后利用C0*C[1]+C1*C[2]+...+Cp*C[p+1]得出答案...
Orz
?
import java.io.PrintWriter; import java.math.BigInteger; import java.util.Scanner;public class Main {Scanner scan=new Scanner(System.in);PrintWriter out=new PrintWriter(System.out);BigInteger c[]=new BigInteger[105];BigInteger h[][]=new BigInteger[105][105];BigInteger n,re;int m;void getc(){c[1]=n;for(int i=2;i<=m+1;i++)c[i]=c[i-1].multiply(n.subtract(BigInteger.valueOf(i-1))).divide(BigInteger.valueOf(i));}void run(){int cas=scan.nextInt();while(cas-- >0){n=scan.nextBigInteger().add(BigInteger.ONE);m=scan.nextInt();getc();for(int i=0;i<=m;i++)h[0][i]=BigInteger.valueOf(i).pow(m);for(int i=1;i<=m;i++)for(int j=0;j<=m-i;j++)h[i][j]=h[i-1][j+1].subtract(h[i-1][j]);re=BigInteger.ZERO;for(int i=0;i<=m;i++)re=re.add(c[i+1].multiply(h[i][0]));out.println(re);out.flush();}}public static void main(String[] args) {new Main().run();} }?
轉載于:https://www.cnblogs.com/acmicky/p/3351862.html
總結
以上是生活随笔為你收集整理的poj 2515 差分序列,排列组合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 中的访问修饰符
- 下一篇: 数据库:内联接,外联接,空值和联接