搜索写的
#include <bits/stdc++.h>
using namespace std;
int n, m, ans;
struct Node
{
int a, b;
double val;
}node[101];
bool cmp(Node a, Node b)
{
return a.val > b.val;
}
int f(int num, int res)
{
int tot = 0;
for(int i = 1; i + num <= m; i++)
{
if(res >= node[num + i].a)
{
res -= node[num + i].a;
tot += node[num + i].b;
}
else return (int)(tot + res * node[num + i].val);
}
return tot;
}
void work(int num, int res, int sum)
{
ans = max(ans, sum);
if(num > n) return;
if(f(num, res) + sum > ans) work(num + 1, res, sum);
if(node[num].a <= res) work(num + 1, res - node[num].a, sum + node[num].b);
}
int main()
{
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; i++)
{
scanf("%d%d", &node[i].a, &node[i].b);
node[i].val =1.0 * node[i].b / node[i].a;
}
sort(node + 1, node + m + 1, cmp);
work(1, n, 0);
printf("%d\n", ans);
return 0;
}