Cod sursa(job #1144180)

Utilizator serbanSlincu Serban serban Data 16 martie 2014 19:04:42
Problema Infasuratoare convexa Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.64 kb
/*#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int s,n,x[501],a[501],M[501],k;
void afisare()
{
    int i;
    for(i=1;i<=n;i++)
        cout<<x[i]<<" de "<<a[i]<<"\n";
    cout<<"\n";
}
void functie(int j,int aux)
{
    int i,z;
    for(i=j;i<=n;i++)
    {
        int MM=aux/a[i];
        for(z=0;z<=MM;z++)
        {
            x[i]=z;
            if(aux-z*a[j]==0)
                afisare();
            else if(aux-z*a[j]>0)
                functie(j+1,aux-z*a[j]);
        }
    }
}
int main()
{
    int i,j;
    freopen("bani.in","r",stdin);
    freopen("bani.out","w",stdout);
    cin>>s>>n;
    for(i=1;i<=n;i++)
        cin>>a[i],M[i]=s/a[i];
    i=1;
    functie(i,s);
    cout<<k<<"\n";
    return 0;
}
*/
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int s,n,x[501],a[501],k;
int cmp(const void *pp, const void *qq)
{
    return *(int *)qq-*(int *)pp;
}
void afisare()
{
    int i;
    for(i=1;i<=n;i++)
        cout<<x[i]<<" de "<<a[i]<<"\n";
    cout<<"\n";
}
void functie(int i, int aux)
{
    int j;
    for(j=i;j<=n;j++)
    {
        x[j]=aux/a[j];
        aux-=x[j]*a[j];
        if(aux==0)
            afisare(),k++;
        while(x[j])
        {
            functie(j+1,aux);
            x[j]--;
            aux+=a[j];
        }
    }
}

int main()
{
    int i,j;
    freopen("bani.in","r",stdin);
    freopen("bani.out","w",stdout);
    cin>>s>>n;
    for(i=1;i<=n;i++)
        cin>>a[i];
    qsort(a+1,n,sizeof(a[1]),cmp);
    i=1;
    functie(i,s);
    cout<<k<<"\n";
    return 0;
}