Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <cstdio>
- #include <vector>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- int T[100][1000];
- int q[100];
- int o = 0;
- void printknapSack(int W, int wt[], int n) {
- int i, w;
- int T[n + 1][W + 1];
- for (i = 0; i <= n; i++) {
- for (w = 0; w <= W; w++) {
- if (i == 0 || w == 0)
- T[i][w] = 0;
- else if (wt[i - 1] <= w)
- T[i][w] = max(wt[i - 1] + T[i - 1][w - wt[i - 1]], T[i - 1][w]);
- else
- T[i][w] = T[i - 1][w];
- }
- }
- int res = T[n][W];
- w = W;
- for (i = n; i > 0 && res > 0; i--) {
- if (res == T[i - 1][w])
- continue;
- else {
- q[o] = wt[i-1];
- o = o + 1;
- res = res - wt[i - 1];
- w = w - wt[i - 1];
- }
- }
- }
- int main() {
- int n;
- cin>>n;
- int wt[n];
- int w1[n];
- for(int i=0;i<n;i++){
- cin>>w1[i];
- if(w1[i] % 10 != 0){
- wt[i] = (w1[i]/10)+1;
- }
- else{
- wt[i]= w1[i]/10;
- }
- }
- int k;
- cin>>k;
- k++;
- int w;
- w = k-1;
- int T[n][k];
- for(int i=0;i<k;i++){
- T[0][i] = 0;
- }
- for(int i=0;i<n;i++){
- for(int j=0;j<k;j++){
- if(j<wt[i]){
- T[i][j] = T[i-1][j];
- }
- else{
- T[i][j] = max(wt[i]+T[i-1][j-wt[i]],T[i-1][j]);
- }
- }
- }
- printknapSack(w,wt,n);
- sort(q,q+o);
- for(int i=0;i<o;i++){
- cout<<q[i]<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement