的用二进制思想进行优化,要不然会tl
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<math.h>
using namespace std;
#define N 1e9+5
int w[10005],dp[100005];
int main()
{
int c;
while(scanf("%d",&c)!=EOF)
{
int n,nn,ww,k=0;
scanf("%d",&n);
//memset(w,0,sizeof(w));
memset(dp,0,sizeof(dp));
//if(n==0){printf("0\n");break;}
for(int i=1;i<=n;i++){
scanf("%d%d",&nn,&ww);
for(int j=1;j<=nn;){
w[++k]=ww*j;
nn=nn-j;
j*=2;
}
if(nn>0){w[++k]=ww*nn;}
}
for(int i=1;i<=k;i++){
for(int j=c;j>=w[i];j--){
dp[j]=max(dp[j],dp[j-w[i]]+w[i]);
}
}
printf("%d\n",dp[c]);
}
}