poj3181
题意:问用1到k组成n共有多少种组成方法
分析:用dp[i][j]纪录前i种数相加得到j共有多少种方法
(1)若j-i>=0,dp[i][j]=dp[i-1][j]+dp[i][j-i]
(2)dp[i][j]=dp[i-1][j]
注意这个地方会爆long long,要用高精度,用java大数类写了一个高精度
1 import java.math.BigInteger; 2 import java.util.Scanner; 3 4 //poj3181 5 public class Main { 6 7 @SuppressWarnings("resource") 8 public static void main(String[] args) { 9 Scanner cin=new Scanner(System.in); 10 int n=cin.nextInt(); 11 int k=cin.nextInt(); 12 BigInteger dp[][]=new BigInteger[102][1020]; 13 for(int i=0;i<=k;i++) 14 for(int j=0;j<=n;j++) 15 dp[i][j]=BigInteger.ZERO; 16 for(int i=1;i<=k;i++){ 17 dp[i][1]=BigInteger.ONE; 18 } 19 for(int i=1;i<=n;i++){ 20 dp[1][i]=BigInteger.ONE; 21 } 22 for(int i=0;i<=k;i++){ 23 dp[i][0]=BigInteger.ONE; 24 } 25 for(int i=1;i<=k;i++){ 26 for(int j=1;j<=n;j++){ 27 if(j-i>=0){ 28 dp[i][j]=dp[i-1][j].add(dp[i][j-i]); 29 }else{ 30 dp[i][j]=dp[i-1][j]; 31 } 32 } 33 } 34 System.out.println(dp[k][n]); 35 } 36 37 }