题目链接:https://acs.jxnu.edu.cn/contest/22/board/challenge/A
描述:
一个窃贼进入一个火柴仓库,想要尽可能多偷一点火柴,仓库里面有m个容器,第i个容器里面有a[i]个火柴盒,每个火柴盒里面有b[i]跟火柴,所有的火柴盒大小相等, burglar的背包可以装n个火柴盒,你的任务是找出一个窃贼可以带走最多的火柴,他没有时间重新调整火柴盒里面的火柴,这就是他选择不超过n盒火柴以至于总火柴数有最大值的原因。
输入:
第一行包括一个整数n(1 ≤ n ≤ 2·108)和一个整数m(1 ≤ m ≤ 20),第i+1行包含一对数a[i]和b[i](1 ≤ ai ≤ 108, 1 ≤ bi ≤ 10),所以输入都为整数。
输出:
输出一个数字,即为问题的答案。
生词:
burglar窃贼
rucksack背包
代码参考:
#include<stdio.h>
int main()
{
int m,b[25],i,flag,max;
long long n,a[10000],count=0,ans=0;
scanf("%lld%d",&n,&m);
for(i=0;i<m;i++)
{
scanf("%lld%d",&a[i],&b[i]);
}//n代表下最多取的盒数,m代表有仓库数,a代表有多少盒,b代表每盒多少个
while(count<n){
max=0;
for(i=0;i<m;i++)
{
if(max<b[i])
{
flag=i;
max=b[i];
}
}
if(count+a[flag]<=n)
{
count+=a[flag];
ans+=a[flag]*b[flag];
b[flag]=0;
}
else
{
ans+=(n-count)*b[flag];
count=n;
}
}
printf("%lld",ans);
return 0;
}