当前位置:   article > 正文

搬砖(2022蓝桥杯国赛)(01背包,排序)_p8806 [蓝桥杯 2022 国 b] 搬砖

p8806 [蓝桥杯 2022 国 b] 搬砖

P8806 [蓝桥杯 2022 国 B] 搬砖 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

搬砖 - 蓝桥云课 (lanqiao.cn)

输入

5
4 4
1 1
5 2
5 5
4 3

输出

10

对于这种,每个对象有两个值,对于某个位置满足前面的一值的和 小于当前 另一个值的题目,都可以采用按照两个值的和来进行从小到大排序

证明

  1. #include <iostream>
  2. #include <bits/stdc++.h>
  3. #include <cstring>
  4. #include <vector>
  5. #include <unordered_map>
  6. #include <queue>
  7. #include <set>
  8. #define int long long
  9. #include <algorithm>
  10. #define x first
  11. #define y second
  12. #define pb emplace_back
  13. #define fu(i,a,b) for(int i=a;i<=b; ++ i)
  14. #define fd(i,a,b) for(int i=a;i>=b; -- i)
  15. #define endl '\n'
  16. #define ms(x,y) memset(x,y,sizeof x)
  17. #define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  18. using namespace std;
  19. typedef long long LL;
  20. typedef unsigned long long ULL;
  21. typedef vector<vector<LL>> VVL;
  22. typedef vector<vector<int>> VVI;
  23. typedef vector<LL> VL;
  24. typedef vector<int> VI;
  25. typedef vector<string> VS;
  26. typedef pair<int,int> PII;
  27. typedef vector<PII> VPII;
  28. typedef pair<PII,int> PIII;
  29. typedef pair<double,double> PDD;
  30. typedef pair<double,int> PDI;
  31. typedef pair<char,int> PCI;
  32. typedef pair<string,int> PSI;
  33. typedef pair<int,string> PIS;
  34. typedef pair<int,char> PIC;
  35. typedef pair<LL,LL> PLL;
  36. typedef __int128 i128;
  37. typedef unsigned long long ULL;
  38. const int N =1e3 + 10,M = N *25,base =400 ,INF = 0x3f3f3f3f,P = 131;
  39. const double eps = 1e-8;
  40. const int mod = 998244353;
  41. const LL LNF=(LL) INF * INF;
  42. int n,sum;
  43. PII q[N];
  44. int f[M];
  45. // 从 前i个中选 ,当前重量为 j
  46. inline void solve()
  47. {
  48. cin >> n ;
  49. fu(i,1,n)
  50. {
  51. int a,b;cin >> a >> b;
  52. // 读入 重量 和 价值
  53. sum += a;
  54. q[i]={a+b,a};
  55. }
  56. sort(q+1,q+1+n);
  57. int ans =0 ;
  58. fu(i,1,n)
  59. {
  60. // 前面 i-1个物品中选择了的重量 不超过q[i].y;
  61. //当前第i个物品的重量为q[i].x - q[i].y ,那么前i个物品中选择了的重量不超过q[i].x ,超过了就是非法状态
  62. fd(j,q[i].x,q[i].y)
  63. {
  64. f[j] = max(f[j],f[j-q[i].y] + q[i].x - q[i].y);
  65. ans = max(f[j],ans);
  66. }
  67. }
  68. cout << ans << endl;
  69. }
  70. signed main()
  71. {
  72. // freopen("1.txt","r",stdin);
  73. // #define int long long
  74. // init(N-1);
  75. ios
  76. // cout << fixed<<setprecision(2);
  77. int t=1;
  78. // cin>>t;
  79. int now = 1;
  80. while(t -- )
  81. {
  82. // cout<<"Case ";
  83. // cout<<"Case #";
  84. // cout<<"Scenario #";
  85. // cout<< now ++ <<": ";
  86. // cout<< now ++ <<": \n";
  87. solve();
  88. }
  89. return 0;
  90. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/586225
推荐阅读
相关标签
  

闽ICP备14008679号