P1102-P1103
//01背包
// #include <iostream>
// #include <algorithm>
// using namespace std;
// int tim[101];
// int val[101];
// int f[1001];
// int main()
// {
// int t,m;
// cin >> t >> m;
// for(int i = 0; i < m; i++)
// {
// cin >> tim[i] >> val[i];
// }
//
// for(int i = 0; i < m; i++)
// {
// for(int v = t; v >= tim[i]; v--)
// {
// if(f[v - tim[i]] + val[i] > f[v])
// {
// f[v] = f[v - tim[i]] + val[i];
// }
// }
// }
// cout << f[t];
// return 0;
// }
//还是超内存。。。(背包总是超)
// #include<iostream>
// using namespace std;
// int main()
// {
// int n,m;
// cin>>n>>m;
// int v,p;
// int dp[30001];
// for(int i=1;i<=m;i++)
// {
// cin>>v>>p;
// for(int j=n;j>=v;j++)
// {
// dp[j]=max(dp[j],dp[j-v]+p*v);
// }
// }
// cout<<dp[n]<<endl;
// return 0;
// }
//正确答案
#include<cstdio>
#include<algorithm>
#define V 30010
using
namespace
std;
int
dp[V],w[30],v[30],n,m;
int
main()
{
int
a,b;
scanf
(
"%d%d"
,&n,&m);
for
(
int
i=1;i<=m;i++)
{
scanf
(
"%d%d"
,&a,&b);
v[i]=a;
w[i]=a*b;
}
for
(
int
j=0;j<=n;j++)
dp[j]=0;
for
(
int
i=1;i<=m;i++)
for
(
int
j=n;j>=0;j--)
if
(j-v[i]>=0)
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
printf
(
"%d"
,dp[n]);
return
0;
}