//
//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