P1118 数字三角形
输入输出样例
输入 #1复制
4 16
输出 #1复制
3 1 2 4
总结目录
1 本题搜索思路
2 本题减少复杂度的两个方法——找规律+过程剪枝
1 本题搜索思路
本题的搜索过程中,是使用类似于全排列的方法dfs。回溯打标记,dfs,去除标记就不再多说了。关键在于返回的条件。一开始按照模拟,我们全部搜索完之后,用一个bool ansIsOk(int n,int targetval) 来验证一个排列解是否合适。验证的过程无非是把数重新加一次,复杂度是n^2,比较和targetval的值。
使用暴力dfs可以得到70%的分数。也比较简单。
2 找规律与过程剪枝
找规律是指最后得到n个数的排列后,我们需要验证他们的和是否为targetval,实际上整个求和的过程是固定的(给定n)时,即系数是一定的。因此我们可以一开始就把系数计算好,利用查表得方式来求取和。这个方法可以将复杂度从n^2降低到n。
除此之外,由于n确定时系数是一定得,因此我们