环境:VB,重点是整理思路。
零、序
0.在ExcelHome上遇到很多凑数的贴子,粗略看过香川的代码,用的递归,看不懂,一直觉得这个比较难。春节无事,尝试挑战。
1.研习香川的贴子,花了很长时间,贴子里的解释不多,很费劲,主要是递归绕来绕去就绕晕了,最后发觉根本看不懂,放弃。
2.咨询老同学,点名这东西属于“背包问题”的简化版。
3.网上找了些背包的贴子,绝大多数都只有代码,关于解题思路说的太少,难以理解代码形成的过程。唯一一个有思路的贴子,用的全是数学符号,还是看不懂。
4.心得:看别人的代码比自己写代码还难。
5.不再看别人写的,打算自己硬编。
一、题型
有100张金额不等的发票,期望找到金额为1000元的各张发票的组合。
二、思路
(一)将发票按金额将序排列。
(二)简化问题:只找能够与第一张发票凑成1000的其他发票。
1st.FatherArr=发票集合,包含编号和金额;通过循环,使Arr=小于1000元的发票集合。
2nd.循环Arr,从第一张开始往下加:
1.如果金额小于1000,说明有希望凑成1000,将发票编号记录到临时变量(如ID),金额合计记录到临时变量(如Sum),然后接着加下一个。
0.在ExcelHome上遇到很多凑数的贴子,粗略看过香川的代码,用的递归,看不懂,一直觉得这个比较难。春节无事,尝试挑战。
1.研习香川的贴子,花了很长时间,贴子里的解释不多,很费劲,主要是递归绕来绕去就绕晕了,最后发觉根本看不懂,放弃。
2.咨询老同学,点名这东西属于“背包问题”的简化版。
3.网上找了些背包的贴子,绝大多数都只有代码,关于解题思路说的太少,难以理解代码形成的过程。唯一一个有思路的贴子,用的全是数学符号,还是看不懂。
4.心得:看别人的代码比自己写代码还难。
5.不再看别人写的,打算自己硬编。
一、题型
有100张金额不等的发票,期望找到金额为1000元的各张发票的组合。
二、思路
(一)将发票按金额将序排列。
(二)简化问题:只找能够与第一张发票凑成1000的其他发票。
1st.FatherArr=发票集合,包含编号和金额;通过循环,使Arr=小于1000元的发票集合。
2nd.循环Arr,从第一张开始往下加:
1.如果金额小于1000,说明有希望凑成1000,将发票编号记录到临时变量(如ID),金额合计记录到临时变量(如Sum),然后接着加下一个。
2.如果金额等于1000,达成期望,把ID记录到结果数组(如Answer),搞定!
3.如果金额大于1000,失败,说明最后一次把数加冒了。
由于发票是降序排列,后面没准有可以能够与加冒之前凑成1000的票,但是怎么弄?
按照以上思路再循环一次!
只不过这次目标值变成1000-Sum,Arr是小于1000-Sum的发票集合。
3.1.如果金额小于1000-Sum,说明有希望凑成1
按照以上思路再循环一次!
只不过这次目标值变成1000-Sum,Arr是小于1000-Sum的发票集合。
3.1.如果金额小于1000-Sum,说明有希望凑成1