Cod sursa(job #3330463)

Utilizator Ilinca_Radu_2022Radu Ilinca-Rucsandra Ilinca_Radu_2022 Data 19 decembrie 2025 17:24:29
Problema Problema rucsacului Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>
#define fi second
#define se first
#define MAXN 5005
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
int n, k, suf[MAXN], ans=0, sum=0, val=0, w;
pair<int, int>x[MAXN];
void bkt(int i);
bool compara(pair<int, int>a, pair<int, int>b);
int main()
{
    fin>>n>>k;
    for (int i=1; i<=n; i++) {
        fin>>x[i].fi>>x[i].se;
    }
    sort(x+1, x+n+1, compara);
    for (int i=n; i>=1; i--) suf[i]=suf[i+1]+x[i].se;
    for (int i=1; i<=n; i++) {
        w+=x[i].fi;
        if (w>k) break;
        ans+=x[i].se;
    }
    bkt(1);
    fout<<ans;
    return 0;
}
void bkt(int i) {
    if (sum>k) return ;
    if (val+suf[i]<ans) return ;
    if (i>n) {
        ans=max(ans, val);
        return ;
    }
    sum+=x[i].fi;
    val+=x[i].se;
    bkt(i+1);
    sum-=x[i].fi;
    val-=x[i].se;
    bkt(i+1);
}
bool compara(pair<int, int>a, pair<int, int>b) {
    return (a.first*b.second>a.second*b.first);
}