>>24 高速化は自分で
#define _dataSiz 5
#define _gmax  8
struct { char nm;
int g;
int k;
} datas[_dataSiz]={{'a',4,450},{'b',5,570},{'c',2,225},{'d',1,110},{'e',6,670}};

int kmax=-1;
int n[_dataSiz]={0,};
int nmax[_dataSiz];
void func(int r)
{int i,sz;
if(r>=_dataSiz)
 {
 int g=0,k=0;
 for(i=0;i<_dataSiz;i++)g += datas[i].g*n[i];
 if(g>_gmax) return ;
 for(i=0;i<_dataSiz;i++)k += datas[i].k*n[i];
 if(k>kmax){kmax=k; for(i=0;i<_dataSiz;i++)nmax[i]=n[i];};
 }else {
sz=_gmax/datas[r].g;
for(i=0;i<=sz;i++){
  n[r]=i;
  func(r+1);
  }
 }
}
int main()
{int i;
func(0);
 for(i=0;i<_dataSiz;i++) printf("%c*%d ",datas[i].nm,nmax[i]);
  printf("%5d\n",kmax);
return 0;
}