fork(1) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int MaxN=1e5;
  5. int dp[MaxN+1];
  6. int main() {
  7. int N,X;
  8. cin>>N>>X;
  9. vector<pair<int,int>> vec;
  10. int m[N]; // money
  11. int p[N]; // pages
  12. for(int i=0;i<N;i++){
  13. cin >> m[i];
  14. }
  15. for(int i=0;i<N;i++){
  16. cin >> p[i];
  17. vec.push_back({m[i],p[i]});
  18. }
  19. sort(vec.begin(),vec.end());
  20. //for(int i=0;i<N;i++){
  21. // cout << vec[i].first << " " << vec[i].second << '\n';
  22. //}
  23. dp[0]=0;
  24. //int M=0;
  25. for(int i=1;i<=X;i++){
  26. dp[i]=0;
  27. for(int j=N-1;j>=0;j--){
  28. if(i-vec[j].first>=0 && dp[i]<dp[i-vec[j].first]+vec[j].second){
  29. dp[i]=dp[i-vec[j].first]+vec[j].second;
  30. if(i==X){
  31. cout << dp[i-vec[j].first] << ' ' << vec[j].second << '\n';
  32. }
  33. }
  34. }
  35. }
  36. for(int i=1;i<=X;i++){
  37. cout << dp[i] << " ";
  38. }
  39. // cout << dp[X] << '\n';
  40. }
  41. /*
  42. 0 1 2 3 4 5 6 7 8 9 10
  43. 0 0 0 1 5 */
  44.  
Success #stdin #stdout 0.01s 5312KB
stdin
4 10
4 8 5 3
5 12 8 1
stdout
0 12
8 8
0 0 1 5 8 8 8 12 13 16