Cod sursa(job #565588)

Utilizator bogfodorBogdan Fodor bogfodor Data 27 martie 2011 22:30:40
Problema Text Scor 0
Compilator cpp Status done
Runda gr_4 Marime 1.66 kb
#include <cstdio>
#include <algorithm>
#define Lmax 503
#define mult 1000000

using namespace std;

FILE *fin=freopen("caibicol.in","r",stdin);
FILE *fout=freopen("caibicol.out","w",stdout);

int n,k,a[Lmax];
int nra,nrn,ok=0;
int sol[Lmax];
int minim=mult;

void citire()
{
    scanf("%d %d\n",&n,&k);
    for(int i=0;i<n;i++)
    {
        scanf("%d\n",&a[i]);
        if(a[i]==a[i-1] && i>0)
            ok=1;
        if(a[i]==0)
            nra++;
        else
            nrn++;
    }
    if(n==k){
        printf("0\n");
        exit(0);
    }
    else
        if(k==1){
            printf("%d\n",nra*nrn);
            exit(0);
        }
        else
            if(n==k+1)
                if(ok==0){
                    printf("0\n");
                    exit(0);
                }
                else{
                    printf("1\n");
                    exit(0);
                }
}

void check()
{
    int sum=0;
    int ag=0;
    for(int i=0;i<k;i++)
    {
        int na=0,nn=0;
        int j;
        for(j=0;j<sol[i];j++)
        {
            if(a[j+sum]==0)
                na++;
            else
                nn++;
        }
        sum+=j;
        ag+=na*nn;
    }
    if(ag<minim)
        minim=ag;
}

void back(int p,int s)
{
    if(p==k) {
        if(s==n)
        {
            check();
        }
    }
    else
    {
        for(int i=1;i<=n-k+1;i++)
        {
            if(s+i<=n)
            {
                sol[p]=i;
                back(p+1,s+i);
            }
        }
    }
}

int main()
{
    citire();
    back(0,0);
    printf("%d\n",minim);
    return 0;
}