01ナップザック問題
#include<bits/stdc++.h>
using namespace std;
const int maxn=1005;
int w[maxn],c[maxn],dp[maxn];
int main(){
int t,m,ans=0;
scanf("%d%d",&t,&m);
for(int i=1;i<=m;++i){
scanf("%d%d",&w[i],&c[i]);
}
for(int i=1;i<=m;++i){
for(int j=t;j>=w[i];--j){
dp[j]=max(dp[j],dp[j-w[i]]+c[i]);
}
}
for(int i=1;i<=t;++i){
if(dp[i]>ans) ans=dp[i];
}
printf("%d\n",ans);
}