裸完全背包.
/*
* USACO3.1.2.cpp
*
* Created on: Jun 7, 2013
* Author: root
*/
#include <iostream>
#include <memory.h>
#include <cstdio>
using namespace std;
const int maxn = 10010;
int dp[maxn], W[maxn], V[maxn];
int M, N;
int main(){
while(~scanf("%d%d", &M, &N)){
for(int i = 0; i < N; ++i){
scanf("%d%d", &V[i], &W[i]);
}
memset(dp, 0, sizeof(dp));
for(int i = 0; i < N; ++i){
for(int j = W[i]; j <= M; ++j){
dp[j] = max(dp[j], dp[j - W[i]] + V[i]);
}
}
printf("%d\n", dp[M]);
}
return 0;
}