Code: Select all
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define mem(a,b) memset(a,b,sizeof(a))
#define mp make_pair
#define pii pair<int,int>
#define fs first
#define sc second
#define VI vector<int>
#define clr(a) a.clear()
#define pob pop_back
#define pub push_back
#define eps 1E-5
#define sf scanf
#define pf printf
#define all(a) a.begin(),a.end()
#define allr(a) a.rbegin(),a.rend()
#define full(a,l) a,a+l
#define fread(name) freopen(name,"r",stdin)
#define fwrite(name) freopen(name,"w",stdout)
#define sz(a) a.size()
#define count_one __builtin_popcount
#define count_onell __builtin_popcountll
#define fastIO ios_base::sync_with_stdio(false)
#define PI (acos(-1.0))
#define linf (1LL<<62)//>4e18
#define inf (0x7f7f7f7f)//>2e9
#define fore(x,i) for(typeof((x).begin()) i=(x.begin()); i!=(x).end(); ++i)
#define rfore(x,i) for(typeof((x).rbegin()) i=(x.rbegin()); i!=(x).rend(); ++i)
#define For(i,a,b) for(int i=a;i<=b;++i)
#define rFor(i,a,b) for(int i=a;i>=b;--i)
template<class T> T pwr(T b, T p)
{
T r=1,x=b;
while(p)
{
if(p&1)r*=x;
x*=x;
p=(p>>1);
}
return r;
}
template<class T> T lcm(T a,T b)
{
return(a/__gcd(a,b))*b;
}
template<class T> T sqr(T a)
{
return a*a;
}
template<class T> void xswap (T &x,T &y)
{
if(x!=y)
{
x^=y;
y^=x;
x^=y;
}
}
template<typename T> inline bool isOn(T &mask,int pos)
{
return((mask)&(1LL<<pos));
}
template<typename T> inline T setf(T mask,int pos)
{
return mask=((mask)&(~(1LL<<pos)));
}
template<typename T> inline T sett(T mask,int pos)
{
return mask=((mask)(1LL<<pos));
}
template<typename T> inline T flip(T mask,int pos)
{
return mask=((mask)^(1LL<<pos));
}
template<class T> string to_string(T n)
{
ostringstream oss;
oss<<n;
oss.flush();
return oss.str();
}
int to_int(string s)
{
int r=0;
istringstream sin(s);
sin>>r;
return r;
}
template<class T1> void put(T1 e)
{
cout<<e<<endl;
}
template<class T1,class T2> void put(T1 e1,T2 e2)
{
cout<<e1<<" "<<e2<<endl;
}
template<class T1,class T2,class T3> void put(T1 e1,T2 e2,T3 e3)
{
cout<<e1<<" "<<e2<<" "<<e3<<endl;
}
template<class T1,class T2,class T3,class T4> void put(T1 e1,T2 e2,T3 e3,T4 e4)
{
cout<<e1<<" "<<e2<<" "<<e3<<" "<<e4<<endl;
}
template<class T1,class T2,class T3,class T4,class T5> void put(T1 e1,T2 e2,T3 e3,T4 e4,T5 e5)
{
cout<<e1<<" "<<e2<<" "<<e3<<" "<<e4<<" "<<e5<<endl;
}
template<class T1> void putv(vector<T1>e1)
{
for(int i=0; i<sz(e1); i++)(!i?cout<<e1[i]:cout<<" "<<e1[i]);
cout<<endl;
}
template<class T1> void puta(T1 arr[],int l)
{
for(int i=0; i<l; i++)(!i?cout<<arr[i]:cout<<" "<<arr[i]);
cout<<endl;
}
template<class T1> bool tk(T1 &e1)
{
return(cin>>e1?true:false);
}
template<class T1,class T2> bool tk(T1 &e1,T2 &e2)
{
return(cin>>e1>>e2?true:false);
}
template<class T1,class T2,class T3> bool tk(T1 &e1,T2 &e2,T3 &e3)
{
return(cin>>e1>>e2>>e3?true:false);
}
template<class T1,class T2,class T3,class T4> bool tk(T1 &e1,T2 &e2,T3 &e3,T4 &e4)
{
return(cin>>e1>>e2>>e3>>e4?true:false);
}
int n,j,q,t,b,e,r,limit,k;
int cost[115],weight[10110],dp[115][10110];
int func( int i , int w )
{
if( i==n+1 )return 0;
if( dp[i][w]!=-1 )return dp[i][w];
int p1=0,p2=0;
//if( w+weight[i]<=k || ( w+weight[i]>2000 && w+weight[i]<=k+200 ) )
p1=cost[i]+func( i+1,w+weight[i] );
//pf("%d\n",w);
p2=func( i+1,w );
dp[i][w]=max( p1,p2 );
//pf("%d\n",w);
return dp[i][w];
}
int main()
{
//freopen("in.txt","r",stdin );
//freopen("out.txt","w",stdout );
while(~sf("%d %d",&k,&n) )
{
r=0;
int sum=0;
memset( dp,-1,sizeof(dp) );
for( j=1; j<=n; j++ )
{
sf("%d %d",&weight[j],&cost[j]);
}
r=func( 1,0 );
sum+=r;
pf("%d\n",sum);
}
return 0;
}