mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
59 lines
956 B
C++
59 lines
956 B
C++
#include<stdio.h>
|
||
#include<string.h>
|
||
#include<stdlib.h>
|
||
struct q
|
||
{
|
||
int a,p;
|
||
};
|
||
int cmp(const void *a,const void *b)
|
||
{
|
||
return (*(q*)a).p-(*(q*)b).p;
|
||
}
|
||
int main()
|
||
{
|
||
q qs[11];
|
||
int cash,n,i,j,con[100001];
|
||
char dp[100001];
|
||
while(scanf("%d%d",&cash,&n)==2)
|
||
{
|
||
if(!n)
|
||
{
|
||
putchar('0');putchar('\n');
|
||
continue;
|
||
}
|
||
for(i=0;i<n;i++)
|
||
{
|
||
scanf("%d%d",&(qs[i].a),&(qs[i].p));//a[i]是钞票数,p[i]是钞票面值
|
||
}
|
||
qs[n].a=0;
|
||
if(!cash)
|
||
{
|
||
putchar('0');putchar('\n');
|
||
continue;
|
||
}
|
||
qsort(qs,n,sizeof(q),cmp);//先规划小面额的dp末尾不会出现错误
|
||
memset(dp,0,sizeof(dp));
|
||
memset(con,0,sizeof(con));
|
||
dp[cash]=1;
|
||
con[cash]=qs[0].a;
|
||
for(i=0;i<n;i++)
|
||
{
|
||
for(j=cash;j>=qs[i].p;j--)
|
||
{
|
||
if(dp[j])
|
||
{
|
||
if(con[j] && !dp[j-qs[i].p])
|
||
{
|
||
con[j-qs[i].p]=con[j]-1;
|
||
dp[j-qs[i].p]=1;
|
||
}
|
||
con[j]=qs[i+1].a;
|
||
}
|
||
}
|
||
}
|
||
for(i=0;!dp[i];i++);
|
||
printf("%d\n",cash-i);
|
||
}
|
||
return 0;
|
||
}
|