有关计数问题的DP
做n的m划分
package 程序设计竞赛;
import java.util.Scanner;
public class DP¥划分数 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//n个数
int m=sc.nextInt();//m个分组
int M=sc.nextInt();
int[][] dp=new int[m+1][n+1];
dp[0][0]=1;
//分组要从1开始
for(int i=1;i<=m;i++){
for(int j=0;j<=n;j++){
if(j-i>=0){
dp[i][j]=(dp[i-1][j]+dp[i][j-i])%M;
}else{
dp[i][j]=dp[i-1][j];
}
}
}
System.out.println(dp[m][n]);
}
}
DP不仅对于求解最优问题有效对于各种排列组合的个数、概率或者期望之类的计算同样管用
多重集组合问题