#include #include #include #define N_DFLT 8 #define B_DFLT 2000 #define MIN_VAL 10 #define MAX_VAL 15 #define INFINITY 1000000000 void genarrays ( int *w, int *c, int n, int min_val, int max_val ) { int i, r, W, C; W = min_val + rand() % (max_val - min_val + 1); C = min_val + rand() % (max_val - min_val + 1); for (i=0; i max) { max = cperw; j = i; } } C = 0.5 + (double)c[j] * (double)B / (double)w[j]; T = (int **)malloc(n * sizeof(int *)); CNT = (int **)malloc(n * sizeof(int *)); for (i=0; i T[i][weight]) { T[i][weight] = cost; CNT[i][weight] = k; } weight += w[i]; cost += c[i]; ++k; } } } cost = 0; weight = 0; for (j=1; j<=B; ++j) { if (T[n-1][j] > cost) { cost = T[n-1][j]; weight = j; } } printf(" Maximum cost = %d\n Weight = %d\n", cost, weight); printf(" Counts : "); printcounts(w,CNT,weight,n-1); printf("\n"); } int main ( int argc, char *argv[] ) { int n, B, *w, *c; srand((unsigned int)time(NULL)); n = (argc >= 2) ? atoi(argv[1]) : N_DFLT; B = (argc >= 3) ? atoi(argv[2]) : B_DFLT; printf("+++ n = %d\n+++ B = %d\n", n, B); w = (int *)malloc(n * sizeof(int)); c = (int *)malloc(n * sizeof(int)); genarrays(w,c,n,MIN_VAL,MAX_VAL); maxpack1(w,c,n,B); maxpack2(w,c,n,B); exit(0); }