dfs Preparing Olympiad

来源:互联网 发布:java服务器开发 简历 编辑:程序博客网 时间:2024/06/03 19:03
#include <bits/stdc++.h>using namespace std;const int N=1e5+10;int num[N],mum[N];int n,m,q,t,l,r;int top,ans,cnt;void dfs(int sum,int d,int x,int minn)///和,差值,当前循环,最小数{    if(sum>=l&&sum<=r&&d>=q) ans++;    if(sum>r) return;    ///if(sum<l) return;当前累加的sum可能小于l    for(int i=x;i<=n;++i)///dfs中需要保留的数就要保留,特别是for循环。    {        dfs(sum+num[i],num[i]-minn,i+1,minn);    }}int main(){    while(cin>>n>>l>>r>>q)    {        ans=0;        memset(num,0,sizeof(num));        for(int i=1; i<=n; ++i) scanf("%d",&num[i]);        sort(num+1,num+1+n);        for(int i=1; i<=n; ++i)        {            dfs(num[i],0,i+1,num[i]);///为了参照最大和最小,引入最小数        }        printf("%d\n",ans);    }    return 0;}

原创粉丝点击