首页 > 其他 > 详细

4月23日

时间:2016-04-23 19:53:32      阅读:238      评论:0      收藏:0      [点我收藏+]

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

 

4月23日

原文:http://www.cnblogs.com/wolf940509/p/5425192.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!