Advertisement
Guest User

Untitled

a guest
Oct 18th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. /*input
  2. 4 6
  3. 3 9
  4. 3 9
  5. 3 9
  6. 6 18
  7. */
  8. #include <algorithm>
  9. #include <bitset>
  10. #include <cassert>
  11. #include <cmath>
  12. #include <cstdio>
  13. #include <cstdlib>
  14. #include <cstring>
  15. #include <ctime>
  16. #include <fstream>
  17. #include <functional>
  18. #include <iomanip>
  19. #include <iostream>
  20. #include <list>
  21. #include <map>
  22. #include <numeric>
  23. #include <queue>
  24. #include <set>
  25. #include <sstream>
  26. #include <stack>
  27. #include <utility>
  28. #include <vector>
  29. using namespace std;
  30. #define sp ' '
  31. #define endl '\n'
  32. #define fi first
  33. #define se second
  34. #define mp make_pair
  35. #define int long long
  36. #define N 1005
  37. #define bit(x,y) ((x>>y)&1LL)
  38. #define show(x) cout << (#x) << ": " << x << endl;
  39. #define ii pair<int,int>
  40. ostream& operator << (ostream &os, vector<int>&x) {
  41.     for (int i = 0; i < x.size(); i++) os << x[i] << sp;
  42.     return os;
  43. }
  44. ostream& operator << (ostream &os, pair<int, int> x) {
  45.     cout << x.fi << sp << x.se << sp;
  46.     return os;
  47. }
  48. ostream& operator << (ostream &os, vector<pair<int, int> >&x) {
  49.     for (int i = 0; i < x.size(); i++) os << x[i] << endl;
  50.     return os;
  51. }
  52.  
  53. int n, W;
  54. pair<int, int> a[N];
  55. pair<int, int> dp[N][10 * N];
  56. const int mod = 1e9 + 7;
  57.  
  58. signed main() {
  59.     ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
  60.     cin >> n >> W;
  61.     for (int i = 1; i <= n; i++) cin >> a[i].fi >> a[i].se;
  62.     dp[0][0] = mp(0, 1);
  63.     for (int i = 1; i <= n; i++) {
  64.         for (int j = 0; j <= W; j++) {
  65.             dp[i][j] = dp[i - 1][j];
  66.             if (j >= a[i].fi) {
  67.                 if (dp[i][j].fi < dp[i - 1][j - a[i].fi].fi + a[i].se) {
  68.                     dp[i][j].fi = dp[i - 1][j - a[i].fi].fi + a[i].se;
  69.                     dp[i][j].se = dp[i - 1][j - a[i].fi].se;
  70.                 }
  71.                 else if (dp[i][j].fi == dp[i - 1][j - a[i].fi].fi + a[i].se) {
  72.                     dp[i][j].se += dp[i - 1][j - a[i].fi].se;
  73.                     dp[i][j].se %= mod;
  74.                 }
  75.             }
  76.         }
  77.     }
  78.     for (int i = 1; i <= W; i++) dp[n][i] = max(dp[n][i - 1], dp[n][i]);
  79.     cout << dp[n][W].fi << sp << dp[n][W].se << endl;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement