算法学习_动态规划

1、有x美分钱,用1美分、5美分、10美分、25美分来组合,有多少种组合方式:

用方式i,表示可以选择前i种美分;

用j表示可以组合成j美分;

用T(i,j)表示在可以选择前i种美分时,组合成j美分的组合方式;

建表如下:

 

  1 5 10 15 20 25 30 35 40 45
1(1美分) 1 1 1 1 1 1 1 1 1 1
2(1、5美分) 1 2 3 4 5 6 7 8 9 10
3(1、5、10美分) 1 2 4 6 9 12 16 20 25 30
4(1、5、10、25) 1 2 4 6 9 13 18 24 31 39

 注意:1) 像2、3、4和1;或者6、7、8、9和5,都可以视为相同。6、7、8、9只是在5的基础上多加了几张一美分的,在决策表中就是重复。如果一个数不能被5整除,则比它小的数中最大的一个能被5整除的数的组合方式和这个数本身的组合方式也一样;2)最后一行可以视为最终结果;

3) j是最小的1美分的n倍,1、2、3、4、5、、、但如1)所说,选择j是5的倍数;

4) 45美分的组合方式:只使用(1、5、10美分)的情况有30种,加上必须使用25美分的情况。45-25=20;则使用前四种方式构成20美分的情况有9种,故30+9=39。

5) T(i,j)=T(i-1,j)+T(i,j-c(i)),其中c(1)=1;c(2)=5;c(3)=10;c(4)=25;

2、不按顺序选择时,比如只能按顺序选择5、10、1、25情况:

  1 5 10 15 20 25 30 35 40 45
1(5美分) 1 1 1 1 1 1 1 1 1 1
2(5、10美分) 1 2 3 4 5 6 7 8 9 10
3(5、10、1美分) 1 2 4 6 9 12 16 20 25 30
4(5、10、1、25) 1 2 4 6 9 13 18 24 31 39

 答案是一样的,T(3,10)=T(2,10)+T(3,9),注意T(3,9)=T(3,5)=2;

3、随机给出一个整数串;得到某几个(0<n)数相加结果相等的组合方式。如1、3、8、4、2、6,得到1+3+2=4+2=6,这三种组合方式:

  1 2 3 4 5 6 7 8 9 10 11 12
1(2) 0 1 0 0 0 0 0 0 0 0 0 0
2(2、4) 0 1 0 1 0 1 0 0 0 0 0 0
3(2、4、1) 1 1 1 1 1 1 1 0 0 0 0 0
4(2、4、1、5) 1 1 1 1 2 2 2 1 1 1 1 1
5(2、4、1、5、8) 1 1 1 1 2 2 2 2 2 2 2 2
6(2、4、1、5、8、6) 1 1 1 1 2 3 3 3 3 3 4 4

 注意区分与1)的区别:

a、i还是表示只选择前i个数字,j是表示相加所得和。T(i,j)表示选择前i个数字时,相加得到和j的组合方式。

b、T(i,j)=T(i-1,j)+T(i-1,j-c(i));(j>c(i))注意与上面不同,因为这里新加入的数字不能重复使用。

     T(i,j)=T(i-1,j)+1;(j=c(i))

     T(i,j)=T(i-1,j);(j<c(i))

其中,c(1)=2;c(2)=4;c(3)=1;c(4)=5;c(5)=8;c(6)=6

posted @ 2013-07-19 17:26  开心成长  阅读(251)  评论(0编辑  收藏  举报