Cod sursa(job #2216806)

Utilizator PinkiePie1189Preoteasa Mircea-Costin PinkiePie1189 Data 28 iunie 2018 00:09:09
Problema Oite Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include<stdio.h>
#include<map>
#define MAX_TERMS 4
#define MAXN 1024
FILE*fin,*fout;


void bkt(int level);
int N,L;
long long ans;
int v[MAXN+1];
int sol[MAX_TERMS+1];

int main()
{
    fin=fopen("oite.in","r");
    fout=fopen("oite.out","w");

    fscanf(fin,"%d%d",&N,&L);

    for(int i=1;i<=N;i++)
    {
            fscanf(fin,"%d",&v[i]);
    }
    ///brut af
    bkt(1);
    fprintf(fout,"%lld",ans);
    /*for(int i=1;i<=N;i++)
    {
        nr_mod[1][v[i]]=1;
    }
    for(int i=2;i<=MAX_TERMS;i++)
    {
        for(int j=1;j<=N;j++)
        {
            for(std::map<int,int>::iterator it=nr_mod[i-1].begin();it!=nr_mod[i-1].end();it++)
            {
                if(nr_mod[i].find(it->first+v[j])==nr_mod[i].end())
                {
                    nr_mod[i][it->first+v[j]]=0;
                }
                printf("%d %d %d\n",it->first,it->second,v[j]);
                nr_mod[i][it->first+v[j]]+=it->second;
            }
        }
    }
    fprintf(fout,"%d",nr_mod[MAX_TERMS][L]);*/
    fclose(fin);
    fclose(fout);

    return 0;
}

void bkt(int level)
{
    if(level==MAX_TERMS+1)
    {
        long long sum=0;
        for(int i=1;i<=MAX_TERMS;i++)
        {
            sum+=v[sol[i]];
        }
        if(sum==L)
        {
            ans++;
        }
    }
    else
    {
        for(int i=sol[level-1]+1;i<=N-MAX_TERMS+level;i++)
        {
            sol[level]=i;
            bkt(level+1);
        }
    }
}