#include <iostream>
#include <cstring>
#include <ctime>
typedef struct{
int size;
int val;
} Item;
const int n = 10; // Число предметов
const int m = 50; // Емкость рюкзака
const int size = 100;
Item items[n];
int max_known[size];
Item item_known[size];
int knap(int cap){
int space;
int max = 0;
int maxi = 0;
int i, t;
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+0YHRgtGMINGA0Y7QutC30LDQutCwCmNvbnN0IGludCBzaXplID0gMTAwOwoKSXRlbSBpdGVtc1tuXTsKaW50IG1heF9rbm93bltzaXplXTsKSXRlbSBpdGVtX2tub3duW3NpemVdOwoKaW50IGtuYXAoaW50IGNhcCl7CglpbnQgc3BhY2U7CglpbnQgbWF4ID0gMDsKCWludCBtYXhpID0gMDsKCWludCBpLCB0OwoKCWlmKG1heF9rbm93bltjYXBdICE9IC0xKSByZXR1cm4gbWF4X2tub3duW2NhcF07Cglmb3IoaSA9IDAsIG1heCA9IDA7IGkgPCBuOyBpKyspCgkJaWYoKHNwYWNlID0gY2FwIC0gaXRlbXNbaV0uc2l6ZSkgPj0gMCkKCQkJaWYoKHQgPSBrbmFwKHNwYWNlKSArIGl0ZW1zW2ldLnZhbCkgPiBtYXgpewoJCQkJbWF4ID0gdDsKCQkJCW1heGkgPSBpOwoJCQl9CgltYXhfa25vd25bY2FwXSA9IG1heDsKCWl0ZW1fa25vd25bY2FwXSA9IGl0ZW1zW21heGldOwoJcmV0dXJuIG1heDsKfQoKCmludCBtYWluKCl7CglzdGQ6Om1lbXNldChtYXhfa25vd24sIC0xLCBzaXplICogc2l6ZW9mKGludCkpOwoKCS8vINCh0L7Qt9C00LDQtdC8INGA0LDQvdC00L7QvNC90YvQtSDQstC10YnQuAoJc3RkOjpzcmFuZCh0aW1lKE5VTEwpKTsKCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspewoJCUl0ZW0gaXQ7CgkJaXQuc2l6ZSA9IDEgKyBzdGQ6OnJhbmQoKSAlIDE1OwoJCWl0LnZhbCA9IDEgKyBzdGQ6OnJhbmQoKSAlIDcwMTsKCQlpdGVtc1tpXSA9IGl0OwoJfQoKCXN0ZDo6Y291dCA8PCBrbmFwKG0pIDw8IHN0ZDo6ZW5kbDsKCglpbnQgcGF1c2U7CglzdGQ6OmNpbiA+PiBwYXVzZTsKfQ==