1 2 5组合100,有多少种方法
问题描述:用随意多个1 2 5三个数字的组合,使其值为100,有多少种组合方法?
基础解法:穷举法,1穷举100次,2穷举50次,5穷举20次,这种方法总共穷举的次数为100*50*20=100 000,性能太差,但是为了以后描述问题,先给出穷举法的代码:
for(int i = 0; i <= 100; i += 5){ count += (100 - i + 2) / 2; //其也可以写成count += ((100 - i) / 2 + 1)}
其实通过这个小的编程题的一步步优化,我们已经在使用动态规划的思想了,其思想的核心就是剪去一些不必要的计算,在进阶解法中,我剪掉了不必要的循环次数,在进一步优化中我们剪掉了1的循环,最优解法中我们将对2的循环也剪掉了,形成了最好的解决办法。