AlbertMourato

Untitled

Feb 29th, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <bits/stdc++.h>
  3. //%lld
  4. typedef long long ll;
  5. #define si(a) scanf("%d", &a)
  6. using namespace std;
  7.  
  8. int vetor[25];
  9. int matriz[25][2000005];
  10. int saida[25];
  11. int main(){
  12.     //freopen("in.txt", "r", stdin);
  13.     //freopen("out.txt", "w", stdout);
  14.     int n, t;
  15.     while(si(n)==1){
  16.         memset(matriz, 0, sizeof(matriz));
  17.         si(t);
  18.         for(int i = 0;i<t;i++)si(vetor[i]);
  19.         matriz[0][vetor[0]] = 1;
  20.         for(int i =1;i<t;i++){
  21.             for(int j = 0;j<=n;j++){
  22.                 if(j<vetor[i]){
  23.                     matriz[i][j] = matriz[i-1][j];
  24.                 }else if(vetor[i]==j){
  25.                     matriz[i][j] = 1;
  26.                 }else{
  27.                     matriz[i][j] = max(matriz[i-1][j], matriz[i-1][j-vetor[i]]);
  28.                 }
  29.             }
  30.         }
  31.         int v = 0;
  32.         for(int i = n;i>=0;i--){//procurando primeira aparição do maior numero <= n
  33.             for(int j = 0;j<25;j++){
  34.                 if(matriz[j][i]==1){//encontrou
  35.                     saida[v] = vetor[j];//salvou o valor que o compõe no vetor de saida
  36.                     v++;
  37.                     if((i-vetor[j])<=0){//chegou no ultimo numero que compoe o n
  38.                         j = 25;//sai do loop
  39.                         i = -1;
  40.                         break;
  41.                     }
  42.                     i-=vetor[j];//vai procurar na linha anterior
  43.                     i++;//proxima iteração o i fara --
  44.                 }
  45.             }
  46.         }
  47.         for(int i = v-1;i>=0;i--)printf("%d ", &saida[i]);
  48.         /*for(int i = 0;i<t;i++){
  49.             for(int j = 0;j<=n;j++){
  50.                 cout<<matriz[i][j]<<" ";
  51.             }
  52.             cout<<endl;
  53.         }*/
  54.     }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment