vineri, 14 septembrie 2018

Subsir de suma maxima

//
//Det secventa de m numere distincte dintr-un sir de n nr, cu suma maxima
//
# include <stdio.h>;
# include <conio.h>;
# include <values.h>;

# define MAX 100

int i,n,m,s,max=-MAXINT,a[MAX],sol[MAX];//,solmax[MAX];
int * solmax;
void afis()
{
int i;
s=0;
for(i=0;i<m;i++)
 {
  //printf("%d ",a[sol[i]]);
  s=s+a[sol[i]];
 }
 if(s>max)
   {
    max=s;
    //for(i=0;i<m;i++)
     //solmax[i]=sol[i];
     solmax=sol;  // !!! NU
   }
//printf("\n");
}
int verif(int j,int k)
{
int i;
for(i=0;i<k;i++)
 if(a[sol[i]]==a[j]) return 0;
return 1;
}
void back(int k)
{
int j;
if(k==m) afis();
else
 for(j=0;j<n;j++)
  if(verif(j,k))
   {
    sol[k]=j;
    back(k+1);
   }
}
void main(void)
{
clrscr();
printf("Intr n,m:\n");
 scanf("%d%d",&n,&m);
printf("Intr elemtele sirului:\n");
for(i=0;i<n;i++)
 scanf("%d",&a[i]);
back(0);
printf("\nSolutia optima este:\n");
for(i=0;i<m;i++)
 printf("%d ",a[solmax[i]]);
printf("\nSuma maxima este: %d\n",max);
getche();
}

Niciun comentariu:

Trimiteți un comentariu