#include #include using namespace std; struct a_t { int c, v; }; vector a; int max_u(int& m, int v) { if(m==-1 || m dp; int i, j, ret; dp.resize(t+1, -1); dp[0]=0; ret=0; for(i=0;i=0;j--) { if(dp[j]>=0) { if(max_u(dp[j+a[i].c], dp[j]+a[i].v)) { max_u(ret, dp[j+a[i].c]); } } } } return ret; } int main(void) { int t, n, i, j; vector c, v, f; while(scanf("%d%d", &t, &n)==2) { a.clear(); c.resize(n); v.resize(n); for(i=0;i>j;j++) { a.push_back((a_t){c[i], v[i]>>j}); } } printf("%d\n", solve(t)); } return 0; }