https://www.luogu.com.cn/problem/P1616

#include<bits/stdc++.h>
#define lc p<<1
#define rc p<<1|1
#define INF 1e18
using namespace std;
#define lowbit(x) x&(-x)
#define endl '\n'
using ll = long long;
using pii = pair<int,ll>;
const double PI = acos(-1);
const int N=1e7+10;
const int M=1e2+10;
ll tim[N],w[N];
//ll dp[N][M];
ll dp[N];
//三维
//void solve(){
//	ll t,m;cin>>t>>m;
//	for(int i=1;i<=m;i++){
//		cin>>p[i].first>>p[i].second;
//	}
//	for(int i=1;i<=m;i++){
//		auto [tim,v]=p[i];
//		for(int j=0;j<=t;j++){
//			dp[i][j]=dp[i-1][j];
//			for(int k=0;k*tim<=j;k++){
//				dp[i][j]=max(dp[i][j],dp[i-1][j-k*tim]+k*v);
//			}
//		}
//	}
//	cout<<dp[m][t]<<endl;
//}
//二维
//void solve(){
//	ll t,m;cin>>t>>m;
//	for(int i=1;i<=m;i++){
//		cin>>p[i].first>>p[i].second;
//	}
//	for(int i=1;i<=m;i++){
//		auto [tim,v]=p[i];
//		for(int j=0;j<=t;j++){
////			dp[i][j]=dp[i-1][j];
////			if(j<tim) dp[i][j]=dp[i-1][j];
////			else{
////				dp[i][j]=max(dp[i-1][j],dp[i][j-tim]+v);
////			}
//
//			dp[i][j]=dp[i-1][j];
//			if(j>=tim){
//				dp[i][j]=max(dp[i][j],dp[i][j-tim]+v);
//			}
//		}
//	}
//	cout<<dp[m][t]<<endl;
//}
//一维:
//void solve(){
//	ll t,m;cin>>t>>m;
//	for(int i=1;i<=m;i++){
//		cin>>p[i].first>>p[i].second;
//	}
//	for(int i=1;i<=m;i++){
//		auto [tim,v]=p[i];
//		for(int j=tim;j<=t;j++){
//			dp[j]=max(dp[j],dp[j-tim]+v);
//		}
//	}
//	
//	cout<<dp[t]<<endl;
//}

void solve(){
//朴素版 O(n*2) 这道题显然超内存
	int t,m;cin>>t>>m;
	for(int i=1;i<=m;i++){
		cin>>tim[i]>>w[i];
	}
	
//优化版
	for(int i=1;i<=m;i++){
		for(int j=tim[i];j<=t;j++){
			dp[j]=max(dp[j],dp[j-tim[i]]+w[i]);
		}
	}
	cout<<dp[t];
}

int main() {
//	ios::sync_with_stdio(false);
//	cin.tie(nullptr), cout.tie(nullptr);
	int T = 1;
//	cin>>T;
	while (T--) {
		solve();
	}
	
	return 0;
}