fork(2) download
  1. #include <stdio.h>
  2. int fun[105],cost[105];
  3. int K[105][105];
  4. //int max(int a,int b ) { return ( a > b )? a : b; }
  5. int fee;
  6. int knapSack( int S, int N,int wei[],int val[] ) {
  7. int i, w;
  8. // fee=0;
  9. //int K[ N + 1 ][ S + 1 ];
  10.  
  11. for ( i = 0; i <= N; ++i ) {
  12.  
  13. for ( w = 0; w <= S; ++w ) {
  14. if ( i == 0 || w == 0 ) {
  15. K[ i ][ w ] = 0;
  16. }
  17. else if ( wei[ i - 1 ] <= w ) {
  18. if( val[ i - 1 ] + K[ i - 1 ][ w - wei[ i - 1 ] ] > K[ i - 1 ][ w ])
  19. {K[ i ][ w ] = val[ i - 1 ] + K[ i - 1 ][ w - wei[ i - 1 ] ];
  20. /* if(f)
  21. {fee += wei[i-1];
  22. f=0;
  23. printf("fee = %d",fee);*/
  24.  
  25. }
  26.  
  27. else
  28. K[i][w]=K[i-1][w];
  29. }
  30.  
  31. else {
  32. K[ i ][ w ] = K[ i - 1 ][ w ];
  33. }
  34. }
  35. }
  36. return K[ N ][ S ];
  37. }
  38. int main(void) {
  39. int b,n,i,ans;
  40. while(1)
  41. {
  42. scanf("%d%d",&b,&n);
  43. if(b==0 && n==0)
  44. break;
  45. for(i=0;i<n;i++)
  46. {
  47. scanf("%d%d",&cost[i],&fun[i]);
  48. }
  49.  
  50. ans=knapSack(b,n,cost,fun);
  51. for(i=1;i<=b;i++)
  52. {
  53. if(K[n][i]==ans)
  54. { fee=i;
  55. break;}
  56. }
  57. printf("%d %d\n",fee,ans);
  58. }
  59. return 0;
  60. }
  61.  
Success #stdin #stdout 0s 2160KB
stdin
78 20 
24 6 
24 8 
13 0 
23 5 
5 10 
12 3 
14 1 
12 5 
10 9 
21 10 
20 5 
20 2 
11 10 
13 8 
11 1 
10 7 
13 7 
8 2 
24 9 
20 0 
0 0 
stdout
74 56