Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define fr(i, n, m) for(int i = (n); i < (m); i ++)
- #define pb push_back
- #define st first
- #define nd second
- #define pq priority_queue
- #define all(x) begin(x),end(x)
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- typedef pair<int,int> pii;
- ll const inf = 1e9;
- ll const mod = 1e9 + 7;
- ld const eps = 1e-9;
- ll m, n;
- ll a[100000];
- int ANS = 0;
- vector<int> p1;
- vector<int> p2;
- vector<int> t1;
- vector<int> t2;
- void gen2(ll sum, int i, int j){
- if(sum > ANS){
- ANS = sum;
- p1 = t1;
- p2 = t2;
- }
- if(j < i) return;
- if(sum + a[j] <= m){
- t2.pb(j);
- gen2(sum + a[j], i, j - 1);
- t2.pop_back();
- }
- else{
- gen2(sum, i,j-1);
- }
- }
- void gen(ll sum, int i){
- if(i >= n) return;
- gen2(sum, i, n - 1);
- if(sum + a[i] <= 1e8){
- t1.pb(i);
- gen(sum + a[i], i + 1);
- t1.pop_back();
- gen(sum, i + 1);
- }
- }
- int main(){
- cin >> m >> n;
- fr(i, 0, n) cin >> a[i];
- gen(0, 0);
- cout << ANS << endl;
- for(auto u : p1) cout << u <<' ';
- for(auto u : p2) cout << u <<' ';
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment