#include<cstdio>
#include<cstring>
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)>(y)?(y):(x))
int dp[100010];
int v[1250],m[1250];
int main()
{
int col,n;
while(~scanf("%d%d",&col,&n))
{
for(int i=0;i<n;i++)
scanf("%d%d",&m[i],&v[i]);
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
{
int num=m[i];
for(int k=1;num>0;k<<=1)
{
int mul=MIN(k,num);
for(int j=col;j>=mul*v[i];j--)
dp[j]=MAX(dp[j],dp[j-mul*v[i]]+mul*v[i]);
num-=mul;
}
}
printf("%d\n",dp[col]);
}
}
poj 1276 (完全背包二进制转化01背包)
最新推荐文章于 2023-07-01 17:03:33 发布