結果
問題 |
No.2686 商品券の使い道
|
ユーザー |
![]() |
提出日時 | 2024-03-01 08:15:43 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,086 bytes |
コンパイル時間 | 3,120 ms |
コンパイル使用メモリ | 261,620 KB |
実行使用メモリ | 13,636 KB |
最終ジャッジ日時 | 2024-09-30 05:08:37 |
合計ジャッジ時間 | 23,770 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 28 TLE * 1 -- * 19 |
ソースコード
#include <bits/stdc++.h> using namespace std; #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") using ll = long long; const ll INF = 1e18; //O(3^n) int main(){ ll n,m,q; cin >> n >> m >> q; vector<ll> a(n),b(n); vector<pair<ll,ll>> x(n); for(ll i = 0;i < n;i++){ cin >> x[i].first >> x[i].second; } sort(x.rbegin(),x.rend()); for(ll i = 0;i < n;i++){ a[i] = x[i].first; b[i] = x[i].second; } ll msum = 0,qsum = 0,val = 0,ans = 0; auto rec = [&](auto &rec,ll i) -> void { if(i==n){ ans = max(ans,val); return; } rec(rec,i+1); if(msum+a[i] <= m){ msum += a[i]; val += b[i]; rec(rec,i+1); msum -= a[i]; val -= b[i]; } if(qsum+a[i] <= q){ qsum += a[i]; val += b[i]; rec(rec,i+1); qsum -= a[i]; val -= b[i]; } return; }; rec(rec,0); cout << ans << endl; }