CCCPaste

Untitled

#include 
#include 
#include 
using namespace std;

#define ll long long
#define pb push_back
#define mp make_pair

int n, c;
vector> weight;
int dp[100][30000];

int rec(int idx, int w){
    if(idx == c) return 0;

    if(dp[idx][w] != -1){
        return dp[idx][w];
    }

    int result = -2e9;

    result = max(result, rec(idx + 1, w));
    if(weight[idx].second <= w){
        result = max(result, rec(idx + 1, w - weight[idx].second + weight[idx].first) + 1);
    }
    dp[idx][w] = result;
    return result;
}


int main(){

    ios_base::sync_with_stdio(false);
    cout.tie(0);
    cin.tie(0);


    cin >> n >> c;
    for(int i = 0; i < c; i++){
        int a, b;
        cin >> a >> b;
        weight.pb(mp(b, a));
    }

    sort(weight.rbegin(), weight.rend());

    for(int i = 0; i < c; i++){
        for(int j = 0; j < 30000; j++){
            dp[i][j] = -1;
        }
    }

    cout << rec(0, n) << endl;

    return 0;
}