#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct {
int n, b, g;
int *c, *a, *f;
} dataSet;
void freeDataset(dataSet* dsptr) {
}
int read_TP2_instance_from_string(const char* content, dataSet* dsptr) {
int n, b, g;
const char* ptr = content;
if (sscanf(ptr
, "%d,%d,%d", &n
, &b
, &g
) != 3) return -1;
dsptr->n = n;
dsptr->b = b;
dsptr->g = g;
dsptr
->c
= malloc(sizeof(int) * n
); dsptr
->a
= malloc(sizeof(int) * n
); dsptr
->f
= malloc(sizeof(int) * n
);
int line = 0;
while (*ptr && line < n) {
// Avancer à la ligne suivante
while (*ptr && *ptr != '\n') ptr++;
if (*ptr) ptr++;
if (sscanf(ptr
, "%d,%d,%d", &dsptr
->c
[line
], &dsptr
->a
[line
], &dsptr
->f
[line
]) != 3) break;
line++;
}
return (line == n) ? 0 : -1;
}
int dynamicProgramming1DKP(int capacity, int* weights, int* values, int n) {
int* dp
= calloc(capacity
+ 1, sizeof(int)); for (int i = 0; i < n; i++) {
for (int w = capacity; w >= weights[i]; w--) {
if (dp[w - weights[i]] + values[i] > dp[w]) {
dp[w] = dp[w - weights[i]] + values[i];
}
}
}
int result = dp[capacity];
return result;
}
int main() {
const char* instance_data =
"5,15,10\n"
"10,5,2\n"
"40,4,1\n"
"30,6,3\n"
"50,3,4\n"
"35,2,2\n";
dataSet data;
if (read_TP2_instance_from_string(instance_data, &data) != 0) {
fprintf(stderr
, "Failed to read instance data.\n"); return 1;
}
printf("Instance loaded: %d items, capacity b = %d\n", data.
n, data.
b); for (int i = 0; i < data.n; i++) {
printf("%d\t%d\t%d\n", i
, data.
c[i
], data.
a[i
]); }
int result = dynamicProgramming1DKP(data.b, data.a, data.c, data.n);
printf("Optimal value (1D Knapsack): %d\n", result
);
freeDataset(&data);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8dGltZS5oPgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IG4sIGIsIGc7CiAgICBpbnQgKmMsICphLCAqZjsKfSBkYXRhU2V0OwoKdm9pZCBmcmVlRGF0YXNldChkYXRhU2V0KiBkc3B0cikgewogICAgZnJlZShkc3B0ci0+Yyk7CiAgICBmcmVlKGRzcHRyLT5hKTsKICAgIGZyZWUoZHNwdHItPmYpOwp9CgppbnQgcmVhZF9UUDJfaW5zdGFuY2VfZnJvbV9zdHJpbmcoY29uc3QgY2hhciogY29udGVudCwgZGF0YVNldCogZHNwdHIpIHsKICAgIGludCBuLCBiLCBnOwogICAgY29uc3QgY2hhciogcHRyID0gY29udGVudDsKCiAgICBpZiAoc3NjYW5mKHB0ciwgIiVkLCVkLCVkIiwgJm4sICZiLCAmZykgIT0gMykgcmV0dXJuIC0xOwoKICAgIGRzcHRyLT5uID0gbjsKICAgIGRzcHRyLT5iID0gYjsKICAgIGRzcHRyLT5nID0gZzsKCiAgICBkc3B0ci0+YyA9IG1hbGxvYyhzaXplb2YoaW50KSAqIG4pOwogICAgZHNwdHItPmEgPSBtYWxsb2Moc2l6ZW9mKGludCkgKiBuKTsKICAgIGRzcHRyLT5mID0gbWFsbG9jKHNpemVvZihpbnQpICogbik7CgogICAgaW50IGxpbmUgPSAwOwogICAgd2hpbGUgKCpwdHIgJiYgbGluZSA8IG4pIHsKICAgICAgICAvLyBBdmFuY2VyIMOgIGxhIGxpZ25lIHN1aXZhbnRlCiAgICAgICAgd2hpbGUgKCpwdHIgJiYgKnB0ciAhPSAnXG4nKSBwdHIrKzsKICAgICAgICBpZiAoKnB0cikgcHRyKys7CgogICAgICAgIGlmIChzc2NhbmYocHRyLCAiJWQsJWQsJWQiLCAmZHNwdHItPmNbbGluZV0sICZkc3B0ci0+YVtsaW5lXSwgJmRzcHRyLT5mW2xpbmVdKSAhPSAzKQogICAgICAgICAgICBicmVhazsKICAgICAgICBsaW5lKys7CiAgICB9CgogICAgcmV0dXJuIChsaW5lID09IG4pID8gMCA6IC0xOwp9CgppbnQgZHluYW1pY1Byb2dyYW1taW5nMURLUChpbnQgY2FwYWNpdHksIGludCogd2VpZ2h0cywgaW50KiB2YWx1ZXMsIGludCBuKSB7CiAgICBpbnQqIGRwID0gY2FsbG9jKGNhcGFjaXR5ICsgMSwgc2l6ZW9mKGludCkpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBmb3IgKGludCB3ID0gY2FwYWNpdHk7IHcgPj0gd2VpZ2h0c1tpXTsgdy0tKSB7CiAgICAgICAgICAgIGlmIChkcFt3IC0gd2VpZ2h0c1tpXV0gKyB2YWx1ZXNbaV0gPiBkcFt3XSkgewogICAgICAgICAgICAgICAgZHBbd10gPSBkcFt3IC0gd2VpZ2h0c1tpXV0gKyB2YWx1ZXNbaV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBpbnQgcmVzdWx0ID0gZHBbY2FwYWNpdHldOwogICAgZnJlZShkcCk7CiAgICByZXR1cm4gcmVzdWx0Owp9CgppbnQgbWFpbigpIHsKICAgIGNvbnN0IGNoYXIqIGluc3RhbmNlX2RhdGEgPQogICAgICAgICI1LDE1LDEwXG4iCiAgICAgICAgIjEwLDUsMlxuIgogICAgICAgICI0MCw0LDFcbiIKICAgICAgICAiMzAsNiwzXG4iCiAgICAgICAgIjUwLDMsNFxuIgogICAgICAgICIzNSwyLDJcbiI7CgogICAgZGF0YVNldCBkYXRhOwogICAgaWYgKHJlYWRfVFAyX2luc3RhbmNlX2Zyb21fc3RyaW5nKGluc3RhbmNlX2RhdGEsICZkYXRhKSAhPSAwKSB7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVhZCBpbnN0YW5jZSBkYXRhLlxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgcHJpbnRmKCJJbnN0YW5jZSBsb2FkZWQ6ICVkIGl0ZW1zLCBjYXBhY2l0eSBiID0gJWRcbiIsIGRhdGEubiwgZGF0YS5iKTsKICAgIHByaW50ZigiaVx0dmFsdWVcdHdlaWdodFxuIik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubjsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlZFx0JWRcdCVkXG4iLCBpLCBkYXRhLmNbaV0sIGRhdGEuYVtpXSk7CiAgICB9CgogICAgaW50IHJlc3VsdCA9IGR5bmFtaWNQcm9ncmFtbWluZzFES1AoZGF0YS5iLCBkYXRhLmEsIGRhdGEuYywgZGF0YS5uKTsKICAgIHByaW50ZigiT3B0aW1hbCB2YWx1ZSAoMUQgS25hcHNhY2spOiAlZFxuIiwgcmVzdWx0KTsKCiAgICBmcmVlRGF0YXNldCgmZGF0YSk7CiAgICByZXR1cm4gMDsKfQo=