背包问题

来源:互联网 发布:fzqkbysjw gb1 0mac 编辑:程序博客网 时间:2024/04/28 23:47
 
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 最大的开始装 *  *  * */