zoukankan      html  css  js  c++  java
  • n个数中选k个数和为sum

    从n个数中选k个数,使和为sum

    输入

    第一行 n k sum

    第二行 n个数

    输出

    可以选的种数

    输入样例:

    5 3 9

    1 2 3 4 5

    30 8 200

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

    输出样例:

    2

    70

    #include <stdio.h>
    #include <iostream>
    #include <math.h>
    #include <string.h>
    using namespace std;
    const double PI=acos(-1.0);
    int n,k,sum;
    int ans;
    int a[105];
    bool vis[105];
    void dfs(int pos,int cnt,int s){
        if(cnt>k||s>sum){//剪枝 
            return;
        }
        if(cnt==k&&s==sum){//满足选了k个数和为sum 则结果+1 
            ans++;
        }
        for(int i=pos;i<n;i++){//该循环表示便利数组找满足条件的解 超过条件的直接剪枝 
                               //从pos开始表示选过的不会重复选择  每次循环的下一个项是未搜索过的项 
            if(!vis[i]){
                vis[i]=true;
                dfs(i+1,cnt+1,s+a[i]);
                vis[i]=false;
            }
        }
    }
    int main(){
        cin>>n>>k>>sum;
        for(int i=0;i<n;i++){
            cin>>a[i];
            //a[i]=i+1;
        }
        dfs(0,0,0);
        cout<<ans;
        return 0; 
    }
  • 相关阅读:
    nodejs获取服务器数据到页面
    Struts 2
    JQuery
    JDBC
    Hiberbate
    EasyUi
    JavaScript
    利用 HashSet 去过滤元素是否重复
    HTML
    MySQL
  • 原文地址:https://www.cnblogs.com/xusi/p/12336266.html
Copyright © 2011-2022 走看看