Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Clasament dupa rating | Monitorul de evaluare | Cod sursa (job #565588)
Cod sursa(job #565588)
#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;
}