package greed;
import java.util.*;
public class Pack {
public static void getPack(int v[],int w[],int n,int max)
{
for(int i=0;i<n;i++)
for(int j=0;j<n-i-1;j++)
if((double)v[j]/w[j]<(double)v[j+1]/w[j+1])
{
int temp = v[j];
v[j] = v[j+1];
v[j+1] = temp;
temp = w[j];
w[j] = w[j+1];
w[j+1] = temp;
}
int money = 0,i=0;
int weight=0;
/*while(max>0&&i<n)
{
if(max>=w[i])
{
money+=v[i]*w[i];
max -= w[i];
}
else
{
money+=v[i]*max;
break;
}
i++;
}*/
for(int j=0;j<n;j++)
{
weight+=w[j];
if(weight<max)
money+=v[j]*w[j];
else
{
int temp = max-(weight-w[j]);
money+=temp*v[j];
break;
}
}
System.out.println(money);
}
public static void main(String args[]) throws Exception
{
int n,s,max;
int v[] = new int[12];
int w[] = new int[12];
Scanner cin = new Scanner(System.in);
n=cin.nextInt();
for(int i=0;i<n;i++)
{
s = cin.nextInt();
max = cin.nextInt();
for(int j=0;j<s;j++)
{
v[j] = cin.nextInt();
w[j] = cin.nextInt();
}
getPack(v,w,s,max);
}
}
}
/*
* 背包问题:
* 以一个承重最多为 W 的背包,使装下列物品的价值总和最大
* 思路:根据物品性价比进行排序 v/w ,然后从 v/w 最大的开始装
*
*
* */
背包问题
最新推荐文章于 2024-06-17 00:06:23 发布