NOIOL普及T3关于dfs+剪枝的可行性讨论
查看原帖
NOIOL普及T3关于dfs+剪枝的可行性讨论
232099
wangheyi998楼主2020/5/27 21:33

刚刚看了题解,发现并没有dfs+剪枝,在考场上我是考虑的dfs+剪枝,但是因为太麻烦 其实就是不会打 就没打,现在来讨论一下可行性。

目前我是有一个想法,大概是把每种钱能组成的面值存成一个二维数组(存得下)。按照钱币的大小排序,第一大的钱存在第一行 这算一个优化搜索顺序?,然后a[i][j]=j*money[i]

比如说只有一种2块钱,2块钱有3张这种就a[1][1]=2,a[1][2]=4,a[1][3]=6这种

然后显然每行只能选一个数,假如每行选了两个数要么不合法要么可以被这一行的某一个数等效替代

然后就从第一行第一个数开始搜索,下面是剪枝

1,如果目前的钱数已经大于需要的钱数了,那么直接返回

2,如果剩下的钱的总数都小于需要的钱数,直接返回

3.如果当前钱数已经大于需要的钱数,那么直接返回。

目前就想出了这三种,希望大佬能给点补充,这么三个剪枝感觉过不了。谁知道呢反正是玄学复杂度

2020/5/27 21:33
加载中...