標籤:code str ++ [1] div static 順序 int log
題目描述:將M個蘋果放置到N個盤子中,可以有盤子為空白,但是不分順序,例如5個蘋果分到3個盤子中,1+1+3和1+3+1視為同一種方法,求所有的方法總數。
****動態規劃*****
import java.util.Scanner; 2 public class Main{ 3 public static void main(String[] args) 4 { 5 /* 6 *以dp[i][j]表示i個蘋果放置到j個盤子的方法數 7 *i個蘋果放到j個盤子中(不分順序)分為兩種情況 8 *1.有一個盤子為空白(此種情況包含多個盤子為空白的狀況) 9 *方法數為dp[i][j-1]10 *2.所有盤子都不為空白,則每個盤子至少有一個蘋果,剩餘的11 *i-j個蘋果在放置到j個盤子中,方法數為dp[i-j][j]12 *則dp[i][j] = dp[i][j-1]+dp[i-j][j]13 (另外要考慮當就j>i時,dp[i][j]=dp[i][i])14 */15 Scanner sc = new Scanner(System.in);16 while(sc.hasNext())17 {18 int M = sc.nextInt();19 int N = sc.nextInt();20 int[][] dp = new int[M+1][N+1];21 for(int i=1;i<=N;i++)22 {23 dp[1][i]=1;24 dp[0][i]=1;25 }26 for(int i=1;i<=M;i++)27 {28 dp[i][1]=1;29 dp[i][0]=0;30 }31 for(int i=2;i<=M;i++)32 {33 for(int j=2;j<=N;j++)34 {35 if(i>=j)36 dp[i][j] = dp[i][j-1]+dp[i-j][j];37 else38 dp[i][j]=dp[i][i];39 }40 }41 System.out.println(dp[M][N]); 42 }43 }44 }
動態規劃之分蘋果