zoukankan      html  css  js  c++  java
  • BackTracking_Fixed sum for array elements

    Given an array a contains distinct positive integers, count how many combinations of integers in a add up to exactly sum

    For example, given int[] a = {11, 3, 8} ; and sum = 11

    You should output 2, because 11 == 11 and 3 + 8 == 11

    This is typically a backtracking problem

    Enumerate all the subsets of the given array to see how many of them match the condition

    when you write backtracking procedure using recursion, please be careful of which condition do you

    use to terminate the loop, in this code snippet, there two conditions,

    1. sum == 0

    2. t == a.Length

    and when t == a.Length, we might be got an solution yet, don't forget this case.

    Backtracking

    Code

    recursive way

    Code

    C法

    #include<stdio.h>
    #include<stdlib.h>
    
    int count = 0; // number of solutions
    
    /*
     * array - positive numbers
     * n     - element count in array
     * sum   - pair of sum
     * t     - recursion deep
     */
    void find_combinations(int *array, int n, int sum, int t) {
        if (t == n) {
            if (sum == 0) {
                count++;
            }
            return;
        }
    
        if (sum == 0) { // Find a solution
            count++;
        }
        else {
            if (sum >= array[t]) {  // left tree
                find_combinations(array, n, sum - array[t], t + 1);
            }
            if (sum > 0) {                  // right tree
                find_combinations(array, n, sum, t + 1);
            }
        }
    }
    
    int main(void) {
        int a[] = {11, 3, 8, 4, 1, 7};
        find_combinations(a, 6, 11, 0);
        printf("%d\n", count);
    
        system("pause");
        return 0;
    }

    ==

     

  • 相关阅读:
    Java从入门到精通——调错篇之ORACLE 打开PLSQL时提示ora-01033
    2012年——2013年总结
    一个订单相关的存储过程(MySQL)
    EHCache 实现通用类 CacheManager
    超越算法来看待个性化推荐
    Jackson怎样转换这样的字符串? String jsonStr = "{dataType:'Custom',regexp:'t\d+',msg:'输入不正确'}";
    实时个性化推荐系统简述
    Java从入门到精通——基础篇之Servlet与JSP的区别
    TIME_WAIT引起Cannot assign requested address报错
    synchronized 用法,实例讲解
  • 原文地址:https://www.cnblogs.com/graphics/p/1495466.html
Copyright © 2011-2022 走看看