#include<bits/stdc++.h>
using namespace std;
int n,m,d[1001][101],v[1010],w[1010];
int main()
{
scanf("%d %d",&n,&m);
for (int i=1;i<=m;i++) scanf("%d %d",&v[i],&w[i]);
for (int i=1;i<=m;i++)
for (int j=n;j>=0;j--)
if (j>=v[i])
d[i][j]=max(d[i-1][j-v[i]]+w[i],d[i-1][j]);
else d[i][j]=d[i-1][j];
printf("%d\n",d[m][n]);
}
//d[i][j]=max(d[i-1][j-v[i]]+w[i],d[i-1][j]);
为什么j循环要反着来呀,正着不行吗