原题链接:
https://www.nowcoder.com/practice/d7c03b114f0541dd8e32ce9987326c16?tpId=40&tqId=21406&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
const int inf = 0x3f3f3f3f;
typedef long long ll;
typedef unsigned long long ull;
const ll N = 1e2 + 10;
const ll MAXN = 1e6+10;
const ll mod = 1e5;
struct E{
int w;
int v;
}node[101];
int dp[1001];
int main()
{
int s, n;
while(cin >> s >> n)
{
for(int i = 1; i <= n; i++)
{
cin >> node[i].w >> node[i].v;
}
for(int i = 0; i <= s; i++)
{
dp[i] = 0;
}
for(int i = 1; i <= n; i++)
{
for(int j = s; j >= node[i].w; j--)
{
dp[j] = max(dp[j], dp[j - node[i].w] + node[i].v);
}
}
cout << dp[s] << endl;
}
return 0;
}