static void do_combsum(const int *nums, int len, int cursum, int tgt)
{
	int	i, t, oldansp;

	if (cursum == tgt) {
		addres();
		return;
	}

	if (len <= 0)
		return;

	for (i = 0; i < len; i++) {
		if (cursum + nums[i] > tgt)
			return;
		t = cursum;
		oldansp = ansp;
		while ((t + nums[i]) <= tgt) {
			t += nums[i];
			addans(nums[i]);
			do_combsum(nums + i + 1, len - i - 1, t, tgt);
		}
		ansp = oldansp;
	}
}
Esempio n. 2
0
Node * createEmptyNode(){
	Node* ret = (Node*)malloc(sizeof(Node));
	ret->ismarkedforfree = 0;
	ret->op = NONE;
	ret->left = NULL;
	ret->right = NULL;
	ret->env = NULL;
	ret->data = NULL;
	addres(NODETYPE, ret);
	return ret;
}