zoukankan      html  css  js  c++  java
  • 9.8---硬币问题(CC150)

    这道题卡了一天。要想AC非常难。

    1,第一个解决办法,优化暴力:

    public class Coins {
       public static int countWays(int n){
        int num25 = n / 25;
        long res = 0;
        for(int i = 0; i <= num25;i++){
            int leave25 = n - i * 25;
            int num10 = leave25 / 10;
            for(int j = 0; j <= num10; j++){
                int leave10 = leave25 - j * 10;
                int num5 = leave10 / 5;
                res += num5 + 1;
                res = res % 1000000007;
            }
        }
        return (int) res;
            
        }
    }
    View Code

    2,第二个解决办法,递推式:

    但是LTE。

    dp[i][sum] = 用前i种硬币构成sum 的所有组合数。

    http://www.cnblogs.com/python27/archive/2013/09/05/3303721.html

        public static int myCountWays(int n){
            int[][] dp = new int[5][n+1];
            int[] coins = {1,5,10,25};
            for(int i = 0; i <= 4; i++){
                dp[i][0] = 1;
            }
            for (int i = 1; i <= 4; ++i)
            {
                for (int j = 1; j <= n; ++j)
                {
                    dp[i][j] = 0;
                    for (int k = 0; k <= j / coins[i-1]; ++k)
                    {
                        dp[i][j] += dp[i-1][j - k * coins[i-1]];
                    }
                }
            }
            return dp[4][n];
        }
    View Code

    3,最好的答案:

        public static  int countWays(int n) {
            // write code here
            int[] coins={1,5,10,25};
            int[] dp = new int[100001];      
            dp[0] = 1;
            for(int i = 0;i < 4;++i){
                for(int j = coins[i];j <= n;++j){
                    dp[j] =(dp[j]+dp[j-coins[i]])%1000000007;              
                }
            }
            return dp[n];
        }
    View Code

    目前的理解是:

    如果只有面值1,那么所有值都是1.

    如果有两种面值1,5.那么dp[i] = dp[i] + dp[i - 5];从5开始算。

    所以。

  • 相关阅读:
    poj_2352树状数组
    poj_2187凸包,暴力解法
    zoj_3735,dp,长沙站j题
    hdu_1698线段树成段更新
    poj_2828线段树,逆序插入
    poj_3371
    poj_3071概率dp
    hdu_2191多重背包
    poj_1185状压dp
    css-margin
  • 原文地址:https://www.cnblogs.com/yueyebigdata/p/5097429.html
Copyright © 2011-2022 走看看