Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*knapsack simples*/
- #include <cstdio>
- #include <cstdlib>
- #define MAXOBJ 21
- #define MAXTAM 10001
- int N;
- int t;
- int main()
- {
- int maxTab[MAXOBJ][MAXTAM];
- for(int i = 0; i< MAXOBJ;++i)
- maxTab[i][0] = 0;
- for(int i = 0; i<MAXTAM; ++i)
- maxTab[0][i] = 0;
- while ( scanf("%d",&N) != EOF ){
- scanf("%d",&t);
- int tracks[t];
- for(int i = 0; i < t; ++i)
- {
- int aux = 0;
- scanf("%d",&aux);
- tracks[i] = aux;
- }
- for(int i = 1; i <= t; i++)
- {
- for(int j = 1; j <= N; j++)
- {
- if(tracks[ i - 1 ] > j)
- {
- maxTab[i][j] = maxTab[i - 1][j];
- }else
- {
- if(maxTab[i - 1][j] > (maxTab[i - 1][j - tracks[i - 1]] + tracks[i - 1]))
- {
- maxTab[i][j] = maxTab[i - 1][j];
- }else
- {
- maxTab[i][j] = maxTab[i - 1][j - tracks[i-1]] + tracks[i - 1];
- }
- }
- }
- }
- bool quemTa[t];
- for(int i = 0; i < t; ++i)
- quemTa[i]=false;
- int col = N;
- for(int i = t-1; i>=0; --i)
- {
- int ajuda = col - tracks[i];
- if(ajuda >=0)
- {
- if((maxTab[i + 1][col] - tracks[i]) == maxTab[i][ajuda])
- {
- quemTa[i] = true;
- col = ajuda;
- }
- }
- }
- for(int i = 0; i < t; ++i)
- {
- if(quemTa[i] == true)
- {
- printf("%d ",tracks[i]);
- }
- }
- printf("sum:%d\n",maxTab[t][N]);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment