1
#include<cstring>2
#include<cstdio>3
int const M=100000,N=10;4
int v[N][2],dp[M][2];5
int m,n,ans;6
int main()7


{8
bool readin();9
void solve();10
while(readin())11
solve();12
return 0;13
}14
bool readin()15


{16
int k;17
if(scanf("%d%d",&m,&n)==EOF)18
return false;19
for(k=0;k<n;k++)20
scanf("%d%d",&v[k][0],&v[k][1]);21
return true;22
}23
void solve()24


{25
int i,j,k;26
memset(dp,0,sizeof(dp));27
dp[0][0]=1;28
ans=0;29
for(i=0;i<n;i++)30

{31
for(j=0;j<=m;j++)32

dp[j][1]=0;/**//// 对于每一个币种 对应的硬币用个数都是0 33
for(j=1;j<=m;j++)34

{35
if(dp[j][0]==0)36

{37
k=j-v[i][1];38
if(k>=0&&dp[k][0]==1&&dp[k][1]<v[i][0])39

{40
dp[j][0]=1;41
dp[j][1]=dp[k][1]+1;42
if(j>ans)43
ans=j;44
}45
}46
else47

{48
if(j>ans)49
ans=j;50
}51
}52
}53
printf("%d\n",ans);54
}
浙公网安备 33010602011771号