zoukankan      html  css  js  c++  java
  • NYOJ--1058--dfs--部分和问题

    /*
        Name: NYOJ--1058--部分和问题
        Author: shen_渊 
        Date: 15/04/17 19:27
        Description: 简单的DFS,以为马上过的,递归的i+1写错了,重复好多情况 
    */
    #include<iostream> 
    #include<cstring>
    using namespace std;
    void dfs(int,int);
    int n,k,flag;
    int arr[22];
    int vis[22];
    int main()
    {
    //    freopen("in.txt","r",stdin);
        while(cin>>n>>k){
            memset(vis,0,sizeof(vis));
            memset(arr,0,sizeof(arr));
            flag = 0;
            for(int i=0; i<n; ++i)cin>>arr[i];
            dfs(0,0);
            if(!flag)cout<<"NO
    ";
        }
        return 0;
    }
    void dfs(int ct,int val){
        if(val == k){
            if(!flag){
                flag = 1;
                cout<<"YES
    ";
            }
            for(int i=0; i<n; ++i)
                if(vis[i])cout<<arr[i]<<" ";
            cout<<endl;    
        }
        for(int i=ct; i<n; ++i){//有多个选择,不同的选择项有选择与不选择 
            if(val+arr[i] <= k){
                vis[i] = 1;//标记的作用是输出 
                dfs(i+1,val+arr[i]);// 错了好久ct+1会重复= = i+1一直向下搜索 例子中如果搜到 2 4 7 就不能搜 4 2 7 
                vis[i] = 0;
            }
        }
    }
  • 相关阅读:
    Python_day1
    12/04
    Linux基础笔记
    八:动态规划-未名湖边的烦恼
    七:动态规划-数字三角形
    六:大数运算-减法运算
    五:大数运算-加法运算
    四:大数运算-乘法运算
    三:排序-幸运数字
    二:排序-果园
  • 原文地址:https://www.cnblogs.com/langyao/p/7251883.html
Copyright © 2011-2022 走看看