Advertisement
Guest User

Untitled

a guest
Sep 24th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. int N;
  6. int K;
  7. int L;
  8. int fun[1001];
  9. int ks[2][20001];
  10. int dizzy[1001];
  11.  
  12. int sack()
  13. {
  14. ks[0][0]=0;
  15. ks[0][fun[0]]= dizzy[0];
  16. int cur;
  17. int next;
  18. int d1;
  19. int d2;
  20. for(int i=0; i+1<N; i++)
  21. {
  22. cur=i%2;
  23. next= (i+1)%2;
  24. fill(ks[next],ks[next]+20001, 300001);
  25. for(int j=0; j<=20000; j++)
  26. {
  27. d2= j+fun[i+1];
  28. if(ks[cur][j]<300001)
  29. {
  30. if(ks[next][j]==300001)
  31. ks[next][j]= max(ks[cur][j]-K,0);
  32. else
  33. ks[next][j]=min(max(ks[cur][j]-K,0), ks[next][j]);
  34. if(ks[cur][j]+dizzy[i+1]<=L)
  35. {
  36. if(ks[next][j]==300001)
  37. ks[next][d2]= ks[cur][j]+dizzy[i+1];
  38. else
  39. ks[next][d2]= min(ks[cur][j]+dizzy[i+1],ks[next][d2]);
  40. }
  41. }
  42. }
  43. }
  44. for(int i=20000; i>=0; i--)
  45. if(ks[(N-1)%2][i]<300001)
  46. return i;
  47. return -1;
  48. }
  49. int main()
  50. {
  51. while(true)
  52. {
  53. cin>> N;
  54. cin>> K;
  55. cin>> L;
  56. if(N==0)
  57. break;
  58. fill(ks[0],ks[0]+20001,300001);
  59.  
  60. for(int i=0; i<N; i++)
  61. { cin>> fun[i]; cin>> dizzy[i];}
  62.  
  63. cout<< sack()<< endl;
  64.  
  65. }
  66.  
  67.  
  68. return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement