zoukankan      html  css  js  c++  java
  • 部分和问题

    这一道题有一个条件没有说明  那就是    当有多个符合条件的解 的时候   优先输出后面符合条件的  ..

    这一道题最重要的就是那个线性搜索的   复杂度优化  ..  这个优化确实超级给力  

    先附上正确的代码 , 这样的代码没有重复的     

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #include<set>
    #include<stack>
    #include<string>
    #include<sstream>
    #include<map>
    #include<cctype>
    using namespace std;
    int a[25],b[25],n,sum,q,s[25];
    bool DFS(int i,int m)
    {
        if(i==n)
            return sum==m;
        else
            if(sum<m||m+s[n]-s[i]<sum)           //这里是一个 极好的优化  能极大的减少所用的时间    可以用于以后的  线性搜索  ,    如果可以用这个的话  几乎是 无往不利呀   !   
            return false;
        if(DFS(i+1,m))
            return true;
        if(DFS(i+1,a[i]+m))       //     把这个放在后面的   就是  首先输出  后面 符合条件的   .  
        {
            b[q++]=a[i];
            return true;
        }
        return false;
    }
    int main()
    {
        while(scanf("%d%d",&n,&sum)!=EOF)
        {
            q=0;
            for(int i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                s[i+1]=s[i]+a[i];
            }
            if(DFS(0,0))
            {
                printf("YES
    ");
                for(int i=q-1;i>0;i--)
                    printf("%d ",b[i]);
                printf("%d
    ",b[0]);
            }
            else
                printf("NO
    ");
        }
        return 0;
    }

     

                                                         

  • 相关阅读:
    MyBatis-Generator 最佳实践
    Http请求工具
    多线程编程-之并发编程:阻塞队列
    如数据不存在就插入,存在就更新
    MySQL触发器
    13.multi_match实现dis_max+tie_breaker
    12. tie_breaker的使用原因和使用方法
    11.best fields策略(dis_max参数设置)
    10.多shard场景下relevence score可能不准确
    9.boost权重控制
  • 原文地址:https://www.cnblogs.com/A-FM/p/5355916.html
Copyright © 2011-2022 走看看