有点扭曲的背包

时间:2017-04-21 14:22:08

标签: c knapsack-problem

我努力使我的计划有效,这是我们为假期做的学校功课,基本上这就是我们必须做的事情:

我们正在尝试用背包填充它的最大容量,同时使用给定列表中的objets来最大化它的价值。

我不会厌倦你的细节,所以我会直接去找我目前遇到问题的地方。

我有一个2d动态数组,我试图检查一行所述数组是否包含另一个数组中的一个元素,如果确实如此,我需要将所有内容放在该行上在第二个阵列中。

让我说我有这段代码:

    int **exc, rexc, *lexc, i=0;
    printf("\nHow many exclusion :");
    scanf("%d", &rexc);
    exc = malloc( sizeof(int *) * rexc);
    for(i=0;i<rexc;i++){
        printf("\nHow many elements in exclusion %d : ", i);
        scanf("%d", &lexc[i]);
        exc[i] = malloc( sizeof(Objet) * lexc[i]);
        printf("\n the elements are :");
        for(j=0;j<lexc[i];j++){         
            scanf("%d",&exc[i][j]);
    }
}

有了这个,我已经初始化并填充了我的数组。 现在我有了另一个带有值的数组,让我们说它就像是 间[1] = {5,6} impos [1] = {3,7}

让我们说我们的2D阵列看起来像这样:

EXC [3] [3] = {3,6,2} {2,7,1} {5,2,4}

我需要做的是搜索我的2d数组,如果任何行包含3或7(它不能包含两者,我通过使用一个函数来检查它,确保在运行此函数之前没有问题),然后该行的每个其他元素都需要添加到inter []数组中。

我怎么想我做这项工作就是做这样的事情:

int count=0,i=0, j=0, k=0;
while(count<cimp){
 for(i=0;i<rexc;i++){
    for(j=0;j<lexc[i];j++){
    if (exc[i][j] = impos[count])
        for (k=0;k<lexc[i];k++){
        if(k!=j){

        inter[cinter+1]=exc[i][k];
        cinter++;
        }
    }
}
count++;
}

cinter / cimp是一个变量,其中我存储了inter / impos中的元素数量。

我得到的结果有点时髦,这是一个输出:

How many exclusion : 3

How many elements in exclusion 1 : 3
the elements are : 3 6 2
How many elements in exclusion 2 : 3
the elements are : 2 7 1
How many elements in exclusion 3 : 3
the elements are : 5 2 4

How many obligatory elements : 1
Which are : 5

Forbidden list : 5 0 6 2 5 2 5 5 7 1 5 1 5 5 2 4 5 4 5

我还是习惯了C,希望我能得到你们的任何帮助,并且抱歉让它变得如此长!

0 个答案:

没有答案