POJ 3181

题意:给出n和m,求[1,m]的数中有多少种的和是n

题解:解法不是重点,就是一个简单的背包问题,dp[j+i]+=dp[j],1<=i<=m。问题是n<=1000,m<=100,超long long了,所以java BigInteger一水OK。

View Code
 1 import java.math.*;

 2 import java.util.Arrays;

 3 import java.util.Scanner;

 4 class Main{

 5     static BigInteger dp[]=new BigInteger[1005];

 6     public static void main(String[] args) {

 7         Scanner cin = new Scanner(System.in);

 8         int n,k;

 9         while(cin.hasNext())

10         {

11             Arrays.fill(dp, BigInteger.ZERO);

12             dp[0]=BigInteger.ONE;

13             n=cin.nextInt();

14             k=cin.nextInt();

15             for(int i=1;i<=k;i++)

16                 for(int j=0;i+j<=n;j++)

17                     dp[i+j]=dp[i+j].add(dp[j]);

18             System.out.println(dp[n]);

19         }

20     }

21 }

你可能感兴趣的:(poj)