#include <iostream>
#include <cstring>
#include <ctime>
typedef struct{
int size;
int val;
} Item;
const int n = 10; // Число предметов
const int m = 50; // Емкость рюкзака
const int size = 50;
Item items[n];
int max_known[size];
Item item_known[size];
int knap(int cap){
int space;
int max = 0;
int maxi;
int i, t;
for(int i = 0; i < size; i++)
std::cout << max_known[i] << " ";
std::cout << std::endl;
if(max_known[cap] != -1) return max_known[cap];
for(i = 0, max = 0; i < n; i++)
if((space = cap - items[i].size) >= 0)
if((t = knap(space) + items[i].val) > max){
max = t;
maxi = i;
}
max_known[cap] = max;
item_known[cap] = items[maxi];
return max;
}
int main(){
std::memset(max_known, -1, size * sizeof(int));
// Создаем рандомные вещи
std::srand(time(NULL));
for(int i = 0; i < n; i++){
Item it;
it.size = 1 + std::rand() % 15;
it.val = 1 + std::rand() % 701;
items[i] = it;
}
std::cout << knap(m) << std::endl;
int pause;
std::cin >> pause;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGN0aW1lPgoKdHlwZWRlZiBzdHJ1Y3R7CglpbnQgc2l6ZTsKCWludCB2YWw7Cn0gSXRlbTsKCmNvbnN0IGludCBuID0gMTA7CS8vINCn0LjRgdC70L4g0L/RgNC10LTQvNC10YLQvtCyCmNvbnN0IGludCBtID0gNTA7CS8vINCV0LzQutC+0YHRgtGMINGA0Y7QutC30LDQutCwCmNvbnN0IGludCBzaXplID0gNTA7CgpJdGVtIGl0ZW1zW25dOwppbnQgbWF4X2tub3duW3NpemVdOwpJdGVtIGl0ZW1fa25vd25bc2l6ZV07CgppbnQga25hcChpbnQgY2FwKXsKCWludCBzcGFjZTsKCWludCBtYXggPSAwOwoJaW50IG1heGk7CglpbnQgaSwgdDsKCglmb3IoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQoJCXN0ZDo6Y291dCA8PCBtYXhfa25vd25baV0gPDwgIiAiOwoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCglpZihtYXhfa25vd25bY2FwXSAhPSAtMSkgcmV0dXJuIG1heF9rbm93bltjYXBdOwoJZm9yKGkgPSAwLCBtYXggPSAwOyBpIDwgbjsgaSsrKQoJCWlmKChzcGFjZSA9IGNhcCAtIGl0ZW1zW2ldLnNpemUpID49IDApCgkJCWlmKCh0ID0ga25hcChzcGFjZSkgKyBpdGVtc1tpXS52YWwpID4gbWF4KXsKCQkJCW1heCA9IHQ7CgkJCQltYXhpID0gaTsKCQkJfQoJbWF4X2tub3duW2NhcF0gPSBtYXg7CglpdGVtX2tub3duW2NhcF0gPSBpdGVtc1ttYXhpXTsKCXJldHVybiBtYXg7Cn0KCgppbnQgbWFpbigpewoJc3RkOjptZW1zZXQobWF4X2tub3duLCAtMSwgc2l6ZSAqIHNpemVvZihpbnQpKTsKCgkvLyDQodC+0LfQtNCw0LXQvCDRgNCw0L3QtNC+0LzQvdGL0LUg0LLQtdGJ0LgKCXN0ZDo6c3JhbmQodGltZShOVUxMKSk7Cglmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKCQlJdGVtIGl0OwoJCWl0LnNpemUgPSAxICsgc3RkOjpyYW5kKCkgJSAxNTsKCQlpdC52YWwgPSAxICsgc3RkOjpyYW5kKCkgJSA3MDE7CgkJaXRlbXNbaV0gPSBpdDsKCX0KCglzdGQ6OmNvdXQgPDwga25hcChtKSA8PCBzdGQ6OmVuZGw7CgoJaW50IHBhdXNlOwoJc3RkOjpjaW4gPj4gcGF1c2U7Cn0=