4月23日

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 }
Accept

 

posted @ 2016-04-23 18:19  wolf940509  阅读(123)  评论(0编辑  收藏  举报