프로그램 1▣ 개 요▲ 입력 1. 아이템 4개, 배낭의 용량 16,{아이템번호값어치무게1*************105▲ 입력 2. 아이템 5개. weight와 profit는 5∼50사이의 임의의 수. InitItem() - 아이템 생성 함수아이템 5개 생성후 profit/weight 가 작은 순으로 정렬▲ 알고리즘. knapsack()- 중량초과하지 않고, 현재의 profit이 이전에 구한 maxprofit보다 크다면현재의 profit이 maxprofit이 되고, 현재 아이템 셋은 bestset이 된다.- 현재의 아이템이 유망한가를 검사하여 유망하면그 다음 아이템(트리에서 자식노드)을 포함했을 때와 안 했을 때를 검사함.- 다음 아이템(자식 노드)에 관해 knapsack()함수를 재귀호출하여 최종 solution을 구한다.. promising()중량초과 하지 않고, 현 상태에서 구한 bound값이 이전에 구한 maxprofit보다 크다면(앞으로 더 좋아질 가능성이 있다면) 유망함▲ 출 력. 전역변수 bestset, maxprofit에 저장된 값을 출력. 자식 노드가 확장될 때마다 selected[]에 기록하여 검사한 노드의 번호를 출력함▣ 소스코드#include#include#include#include// for floor()#define MAX 5int numbest, maxprofit, W, n;int w[MAX+1] = {0};// item weightint p[MAX+1] = {0};// item profitint include[MAX+1] = {0};int bestset[MAX+1] = {0};int selected[MAX+1] = {0};// 출력용 : 자식노드 개수 저장void InitItem();// 아이템 생성void knapsack(int, int, int);// 배낭채우기int promising(int, int, int);// promisingint main(){int i;scanf("%d",&i);if(i==1) {w[1] = 2;p[1] = 40;w[2] = 5;p[2] = 30;w[3] = 10;p[3] = 50;w[4] = 5;p[4] = 10;W = 16;n = 4;}else {n = 5;InitItem();// Item random 생성}numbest = 0;maxprofit = 0;knapsack(0,0,0);// Output...printf("nprofit = %dn",maxprofit);// maxprofit 출력printf("Best set : ");// best set 출력for(i=1; i