请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

动态规划问题,感觉是完全背包的变种

老师遇到一个问题,我有些不知道如何定义状态,和写出转移方程。
题目大意,给定15个不重复的数字。(不限制每个数字的使用次数)。给定一个数字num。
问:用这15个数字组成num的方案数是多少?

正在回答

1回答

dp[i][num]表示使用arr[0...i]这些元素,可以凑成num的方法数。


则:dp[i][num] = dp[i - 1][num] + dp[i - 1][num - arr[i]]


即:

使用arr[0...i]这些元素,可以凑成num的方法数等于:


1)dp[i - 1][num]:

不使用arr[i],使用arr[0...i-1]这些元素,可以凑成num的方法数;


2)dp[i - 1][num - arr[i]]

使用arr[i],之后使用arr[0...i-1]这些元素,可以凑成num - arr[i]的方法数;


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 咋啥都不会啊 #1
    谢谢bobo老师
    回复 有任何疑惑可以回复我~ 2019-04-22 09:11:08
  • 提问者 咋啥都不会啊 #2
    dp[i - 1][num - arr[i]] 那这个num-arr[i] 下标越界,怎么处理比较好呢
    回复 有任何疑惑可以回复我~ 2019-04-22 09:48:19
  • liuyubobobo 回复 提问者 咋啥都不会啊 #3
    调用前要判断是否越界啊:)请再仔细研究背包问题,背包问题有同样的越界问题,看看我们是怎么避免的?
    回复 有任何疑惑可以回复我~ 2019-04-22 11:43:30
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信