整数划分 ,DP 或者直接递归(备忘录消除重复)

http://acm.pku.edu.cn/JudgeOnline/problem?id=1664

将整数n可以划分为多少种呢?

将整数n有多少种最大数为m的划分呢?

用ANS[N][M]表示,N的划分中,最大数不超过M的种类

(不超过==”最大数”可以是 1到M的任意数)

分情况讨论:

1)          M==1 ,  ANS[N][M]=1;(全部由1组成)

2)          M>N , ANS[N][M]=ANS[N][N];由于最大数不能也不可能超过N

3)          M==N ,  ANS[N][N]=ANS[N][N-1]+1; (<=N等价于==N U <N,<N==(<=N-1)即 1+ANS[N][N-1])

4)          M<N , ANS[N][M]=ANS[N][M-1]+ANS[N-M][M]

一种是递归调用,利用备忘录避免重复

也可以直接用DP.比较简单

posted @ 2010-03-26 20:02  吴豆豆  阅读(379)  评论(0编辑  收藏  举报