zoukankan      html  css  js  c++  java
  • POJ 3181 Dollar Dayz ( 完全背包 && 大数高精度 )

    题意 : 给出目标金额 N ,问你用面额 1~K 拼成 N 的方案有多少种

    分析 :

    完全背包的裸题,完全背包在 DP 的过程中实际就是列举不同的装填方案数来获取最值的

    故状态转移方程为 dp[i] += dp[j-w[i]]

    但是这题怎么可能那么简单呢! N 和 K 的上限导致答案过大,需要使用高精度加法来完成

    所以无耻的用 JAVA 来搞定了

    import java.io.*;
    import java.lang.reflect.Array;
    import java.util.*;
    import java.math.*;
    import java.util.Arrays;
    public class Main {
        static BigInteger[] dp = new BigInteger[1111];
        public static void main(String[] args){
            Scanner cin = new Scanner (new BufferedInputStream(System.in));
            int N, K;
            while(cin.hasNext()){
                N = cin.nextInt();
                K = cin.nextInt();
                for(int i=0; i<=N; i++)
                    dp[i] = BigInteger.ZERO;
                dp[0] = BigInteger.ONE;
                for(int i=1; i<=K; i++)
                    for(int j=i; j<=N; j++)
                        dp[j] = dp[j].add(dp[j-i]);
                
                System.out.println(dp[N]);
            }
          
        }
    }
    View Code
  • 相关阅读:
    HashMap与Hashtable的区别
    List集合、泛型、装箱拆箱
    关于集合
    统一建模语言
    自定义栈
    学习笔记
    如何优化limit
    mysql五大存储引擎
    [离散数学]2016.12.15周四作业
    [离散数学]2016.12.9周四作业
  • 原文地址:https://www.cnblogs.com/qwertiLH/p/8143893.html
Copyright © 2011-2022 走看看