1. 程式人生 > >動態規劃-硬幣組合數目

動態規劃-硬幣組合數目

import java.util.Scanner;
/*
 * 硬幣的型別有1角,2角,5角,給定一個數額n,多少種組合方式
 */
//暴力解法
public class CashNum {
    public int getNum(int n){
        int count=0;
        for(int i=0;i<=n;i++)
            for(int j=0;j<=n;j=j+2)
                for(int k=0;k<=n;k=k+5)
                    if(i+j+k==n){
                        //System.out.println(n+"="+i+"+"+j+"+"+k+" ");
count++; } return count; } public int getNum2(int[] array,int n){ if(array.length==0||array==null||n<0) return 0; int[][] dp=new int[array.length+1][n+1]; for(int i=0;i<array.length+1;i++) for
(int j=0;j<n+1;j++) dp[i][j]=0; for(int i=0;i<array.length+1;i++) dp[i][0]=1; for(int i=1;i<array.length+1;i++) for(int j=1;j<n+1;j++){ dp[i][j]=0; for(int k=0;k<=j/array[i-1];k++){ dp[i][j]+=dp[i-1
][j-k*array[i-1]]; } } return dp[array.length][n]; } public static void main(String[] args) { // TODO Auto-generated method stub CashNum cn=new CashNum(); Scanner sc =new Scanner(System.in); int n=sc.nextInt(); int count=cn.getNum(n); int[] array={1,2,5}; System.out.println("count="+count); int count2=cn.getNum2(array, n); System.out.println("count2="+count2); } }

相關推薦

動態規劃-硬幣組合數目

import java.util.Scanner; /* * 硬幣的型別有1角,2角,5角,給定一個數額n,多少種組合方式 */ //暴力解法 public class CashNum {

動態規劃-硬幣組合

1.問題描述        對於m個面值為v1,v2,vm的硬幣,組成錢數n,不限制硬幣的數量和位置,求這些硬幣,最多有多少種組合的結果剛好等於n。2.分析     n=x1*v1+x2*v2+....+xm*vm,{x1,x2,....,xm}就是其中的一種組合,定義l[i

動態規劃——硬幣找零

max 關系 i++ 是否 coin fine 個數 names std   動態規劃問題,主要在於需要想清楚遞推關系,num[i][j]表示能使用 i 種硬幣時,得到 j 零錢的最優解。   想來就是首先假設只能使用第一種硬幣 1 ,那麽會得到num[ 1 : n] =

2017烏魯木齊區域賽A(動態規劃組合數學,期望)

ble set 可能 組合 name main i++ return soft #include<bits/stdc++.h>using namespace std;double c[110][110];double g[110];double dp[110]

動態規劃-硬幣找零問題四種情況

題目1:給定陣列arr,arr中所有的值都是正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定一個整數aim代表要找的錢數,求組成aim的最少貨幣數。 舉例:  arr[5,2,3],aim=20。  4張5元可以組成20元,其他的找錢方案都要使

動態規劃 硬幣問題,求最大、最小可以組成一個錢數的數

核心思想:         在我們從 1 元開始依次找零時,可以嘗試一下當前要找零的面值(這裡指 1 元)是否能夠被分解成另一個已求解的面值的找零需要的硬幣個數再加上這一堆硬幣中的某個面值之和,如果這樣分解之後最終的硬幣數是最少的,

動態規劃-硬幣問題

有n種硬幣,面值分別為V1,V2,....,Vn,每種都有無限多。給定非負整數S,可以選用多少個硬幣,使得面值之和恰好為S?輸出硬幣數目的最小值和最大值。 1<=n<=100 0<=S<=10000 1<=Vi<=S 輸入:硬幣的種類n,

動態規劃 硬幣 POJ

總時間限制: 1000ms 記憶體限制: 262144kB 描述 宇航員Bob有一天來到火星上,他有收集硬幣的習慣。於是他將火星上所有面值的硬幣都收集起來了,一共有n種,每種只有一個:面值分別為a1,a2… an。 Bob在機場看到了一個特別喜歡的禮物,想買來送給朋友Alice,這個禮物的價格是X元。B

動態規劃---紙幣組合問題

題目:假設銀行裡一共有n種硬幣,第一種硬幣的價值為V1。假設想把k元兌換成零錢,一共有多少種兌換方案。 例如,一共有1,2,5三種硬幣,k = 5,則有以下兌換方案:11111,1112,122,5。共有4中兌換方案。  動態規劃問題最重要的是要找到狀態

動態規劃:數字組合

描述 有n個正整數,找出其中和為t(t也是正整數)的可能的組合方式。如: n=5,5個數分別為1,2,3,4,5,t=5; 那麼可能的組合有5=1+4和5=2+3和5=5三種組合方式。 輸入 輸入的第一行是兩個正整數n和t,用空格隔開,其中1<=n<=20,

動態規劃——硬幣問題

package dynamic_programming; /** * @author Tom Qian * @email [email protected] * @github https://github.com/bluemaplema

bzoj 2281: [Sdoi2011]黑白棋 博弈論+動態規劃+排列組合

題意 小A和小B又想到了一個新的遊戲。 這個遊戲是在一個1*n的棋盤上進行的,棋盤上有k個棋子,一半是黑色,一半是白色。 最左邊是白色棋子,最右邊是黑色棋子,相鄰的棋子顏色不同。 小A可以移動白

動態規劃-硬幣問題分析

什麼是動態規劃 上次對動態規劃已經有了個大概的分析。引用維基百科的話就是: dynamic programming is a me

動態規劃硬幣面值組合(上臺階)

問題 1分2分5分的硬幣三種,組合成1角,共有多少種組合? 有1分,2分,5分,10分四種硬幣,每種硬幣數量無限,給定n分錢,有多少中組合可以組成n分錢? 一個人上臺階可以一次上1個,2個,或者3個,問這個人上n層的臺階,總共有幾種走法? 問法不一樣,但是

動態規劃-最少硬幣組合問題

import java.util.Scanner; /* * 假設有 1 元,3 元,5 元的硬幣若干(無限),現在需要湊出 11 元,問如何組合才能使硬幣的數量最少? */ public cla

動態規劃硬幣面值組合問題

問題描述   假設我們有8種不同面值的硬幣{1,2,5,10,20,50,100,200},用這些硬幣組合夠成一個給定的數值n。例如n=200,那麼一種可能的組合方式為 200 = 3 * 1 + 1*2 + 1*5 + 2*20 + 1 * 50 + 1

洛谷P1450 [HAOI2008]硬幣購物 動態規劃 + 容斥原理

string -1 line sum mes 開始 clas 完全背包 預處理 洛谷P1450 [HAOI2008]硬幣購物 動態規劃 + 容斥原理 1、首先我們去掉限制 假設 能夠取 無數次 也就是說一開始把他當做完全背包來考慮 離線DP 預處理 復雜度 4*v

9.9遞歸和動態規劃(六)——打印n對括號的所有有效組合(即左右括號正確配對)

思路 即使 情況 else 字符 ram 配對 字符串 pop /** * 功能:打印n對括號的所有有效組合(即左右括號正確配對)。 */ 兩種方法: 方法一: /** * 思路:在括號的最前面或者原有的每對括號中面插入一對括號。至於其它

【BZOJ4559】[JLoi2016]成績比較 動態規劃+容斥+組合數學

desc return char 條件 long long 暴力 inline etc sin 【BZOJ4559】[JLoi2016]成績比較 Description G系共有n位同學,M門必修課。這N位同學的編號為0到N-1的整數,其中B神的編號為0號。這M門必

動態規劃_百煉4120 硬幣

amp 使用 兩種 部分 新的 tor color 不能 blog 1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <math.h> 4 #includ