任务描述
现在有很多物品(它们是可以分割的),每个物品有多个,我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。
#include<stdio.h>
struct node{
int a;
int b;
}q[1000];
int main()
{
int n,weight,ans=0;
scanf("%d %d",&n,&weight);
for(int i=0;i<n;i++)
{
scanf("%d %d",&q[i].a,&q[i].b);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(q[i].a>q[j].a)
{
int temp1=q[i].a;
int temp2=q[i].b;
q[i].a=q[j].a;
q[j].a=temp1;
q[i].b=q[j].b;
q[j].b=temp2;
}
}
}
// for(int i=0;i<n;i++)
// {
// printf("%d %d\n",q[i].a,q[i].b);
// }
while(weight)
{
for(int i=0;i<n;i++)
{
if(weight-q[i].b>=0)
{
weight-=q[i].b;
ans+=q[i].a*q[i].b;
}
else
{
ans+=q[i].a*weight;
weight=0;
break;
}
}
}
printf("%d\n",ans);
return 0;
}