#include<stdio.h>
#include<algorithm>
using namespace std;
struct bag
{
int pi;
int mi;
}a[105];
bool cmp(bag a, bag b)
{
return a.pi>b.pi;
}
int main()
{
int i, v, n, m, sum;
while(~scanf("%d", &v), v != 0)
{
scanf("%d", &n);
for(i=0; i<n; i++)
scanf("%d%d", &a[i].pi, &a[i].mi);
sum = 0;
sort(a, a+n, cmp);
for(i=0; i<n; i++)
{
if(v > a[i].mi)
{
sum = sum + a[i].pi*a[i].mi;
v = v - a[i].mi;
}
else
{
sum = sum + a[i].pi*v;
break;
}
}
printf("%d\n", sum);
}
return 0;
}
#include<algorithm>
using namespace std;
struct bag
{
int pi;
int mi;
}a[105];
bool cmp(bag a, bag b)
{
return a.pi>b.pi;
}
int main()
{
int i, v, n, m, sum;
while(~scanf("%d", &v), v != 0)
{
scanf("%d", &n);
for(i=0; i<n; i++)
scanf("%d%d", &a[i].pi, &a[i].mi);
sum = 0;
sort(a, a+n, cmp);
for(i=0; i<n; i++)
{
if(v > a[i].mi)
{
sum = sum + a[i].pi*a[i].mi;
v = v - a[i].mi;
}
else
{
sum = sum + a[i].pi*v;
break;
}
}
printf("%d\n", sum);
}
return 0;
}
本文介绍了一种使用C++解决背包问题的方法。通过定义结构体存储物品的价格和重量,并使用自定义比较函数对物品按价格从高到低排序。接着在主函数中实现了0-1背包问题的求解过程,通过遍历物品并根据背包容量动态选择装入物品,最终输出最大价值。
302

被折叠的 条评论
为什么被折叠?



