//本来是可以用动规做的,但是也提供另一种方法 #include <stdio.h> long int n,m; int i,v[30],p[30]; long int maxget(int free,int now) { if(now==-1) return 0; if(free-p[now]<0) return maxget(free,now-1); long int max1,max2; max1=maxget(free,now-1); max2=maxget(free-p[now],now-1)+v[now]*p[now]; if(max1>max2) return max1; else return max2; } int main() { scanf("%d %d",&n,&m); for(i=0;i<m;i++) scanf("%d %d",&p[i],&v[i]); printf("%d",maxget(n,m-1)); return 0; }