前言
对于动态规划,正常人容易思维定势,一上来就拿每个dp元素直接用来代表自己想要的结果,很多算法题对于这样的思路根本就是死路,本文章前期主要收集各种各样非常规思路的动态规划算法题(中等及以上难度),后期进行动态规划思想提炼和此类算法题的解法思路总结。
一、算法题收集
1、三维数组
#案例1-分月饼
中秋节,公司分月饼,m个员工,买了n个月饼,m<=n,每个员工至少分1个月饼,但可以分多个,单人分到最多月饼的个数是Max1,单人分到第二多月饼个数是Max2,Max1-Max2 <= 3,单人分到第n-1多月饼个数是Max(n-1),单人分到第n多月饼个数是Max(n),Max(n-1) – Max(n) <= 3, 问有多少种分月饼的方法?
输入描述:
每一行输入m n,表示m个员工,n个月饼,m<=n
输出描述:
输出有多少种月饼分法
补充说明:
收起
示例1
输入:
2 4
输出:
2
说明:
分法有2种:
4=1+3
4=2+2
注意:1+3和3+1算一种分法
示例2
输入:
3 5
输出:
2
说明:
5=1+1+3
5=1+2+2
示例3
输入:
3 12
输出:
6
说明:
满足要求的有6种分法:
12=1+1+10(Max1=10,Max2=1,不满足要求)
12=1+2+9(Max1=9, Max2=2, 不满足要求)
12=1+3+8(Max1=8, Max2=3, 不满足要求)
12=1+4+7(Max1=7, Max2=4, Max3=1,满足要求)
12=1+5+6(Max1=6, Max2=5, Max3=1,不满足要求)
12=2+2+8(Max1