#include<bits/stdc++.h>
using namespace std;
vector<int>v;
double o_1_knapsack(int k, int w[], int p[], int n){
    int mat[n+1][k+1];
    for(int i = 0; i <= n; i++){
        for(int j = 0; j <= k; j++){
            if(i ==0 || j == 0){
                mat[i][j] = 0;
            }
            else if(w[i-1]<=j){
                mat[i][j] = max(p[i-1]+mat[i-1][j-w[i-1]], mat[i-1][j]);
            }
            else{
                mat[i][j] = mat[i-1][j];
            }
        }
    }
    int i = n;
    int j = k;
    while(i>0 && j>0){
        if(mat[i][j] == mat[i-1][j]){
            i--;
        }
        else{
            v.push_back(i);
            i--;
            j=j-w[i-1];
        }
    }
    return mat[n][k];
}
 
 
int main(){
int knapsack = 7;
int weight[]= {2,3,1,2,4};
int profit[]= {7,12,5,12,15};
int n = sizeof(weight)/sizeof(weight[0]);
double ans = o_1_knapsack(knapsack,weight,profit,n);
cout<<ans<<endl;
for(int i = 0; i <v.size(); i++){
    cout<<"item: "<<v[i]<<endl;
}
return 0;
}
 
				I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdmVjdG9yPGludD52Owpkb3VibGUgb18xX2tuYXBzYWNrKGludCBrLCBpbnQgd1tdLCBpbnQgcFtdLCBpbnQgbil7CiAgICBpbnQgbWF0W24rMV1baysxXTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKXsKICAgICAgICBmb3IoaW50IGogPSAwOyBqIDw9IGs7IGorKyl7CiAgICAgICAgICAgIGlmKGkgPT0wIHx8IGogPT0gMCl7CiAgICAgICAgICAgICAgICBtYXRbaV1bal0gPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYod1tpLTFdPD1qKXsKICAgICAgICAgICAgICAgIG1hdFtpXVtqXSA9IG1heChwW2ktMV0rbWF0W2ktMV1bai13W2ktMV1dLCBtYXRbaS0xXVtqXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIG1hdFtpXVtqXSA9IG1hdFtpLTFdW2pdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaW50IGkgPSBuOwogICAgaW50IGogPSBrOwogICAgd2hpbGUoaT4wICYmIGo+MCl7CiAgICAgICAgaWYobWF0W2ldW2pdID09IG1hdFtpLTFdW2pdKXsKICAgICAgICAgICAgaS0tOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICB2LnB1c2hfYmFjayhpKTsKICAgICAgICAgICAgaS0tOwogICAgICAgICAgICBqPWotd1tpLTFdOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBtYXRbbl1ba107Cn0KCgppbnQgbWFpbigpewppbnQga25hcHNhY2sgPSA3OwppbnQgd2VpZ2h0W109IHsyLDMsMSwyLDR9OwppbnQgcHJvZml0W109IHs3LDEyLDUsMTIsMTV9OwppbnQgbiA9IHNpemVvZih3ZWlnaHQpL3NpemVvZih3ZWlnaHRbMF0pOwpkb3VibGUgYW5zID0gb18xX2tuYXBzYWNrKGtuYXBzYWNrLHdlaWdodCxwcm9maXQsbik7CmNvdXQ8PGFuczw8ZW5kbDsKZm9yKGludCBpID0gMDsgaSA8di5zaXplKCk7IGkrKyl7CiAgICBjb3V0PDwiaXRlbTogIjw8dltpXTw8ZW5kbDsKfQpyZXR1cm4gMDsKfQo=