#include <bits/stdc++.h>
using namespace std;
int t, m;
int w[1000];
int v[1000];
int dp[10000];
int i, j, k;
int main() {
cin >> t >> m;
for (i = 1; i <= m; i++)
cin >> w[i] >> v[i];
for (i = 1; i <= m; i++)
for (j = t; j >= 1; j--) { //递推是要从后往前推,不然会覆盖数据
if (j >= w[i])
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
//由于不断更新,取j在j-w前所以得先算
//否则j-w会先更新,不是上一轮的数据
}
for (i = 1; i <= t; i++)
int ans = max(ans, dp[i]);
cout<<ans;
}
滚动数组从后往前层层推进