题意:给出n和m,求[1,m]的数中有多少种的和是n
题解:解法不是重点,就是一个简单的背包问题,dp[j+i]+=dp[j],1<=i<=m。问题是n<=1000,m<=100,超long long了,所以java BigInteger一水OK。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }