acm-背包问题(贪心算法)

背包问题

时间限制:
3000
 ms  |  内存限制:
65535
 KB 难度:
3

描述
现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。
输入
第一行输入一个正整数n(1<=n<=5),表示有n组测试数据;

随后有n测试数据,每组测试数据的第一行有两个正整数s,m(1<=s<=10);s表示有s个物品。接下来的s行每行有两个正整数v,w。

输出
输出每组测试数据中背包内的物品的价值和,每次输出占一行。
样例输入

1
3 15
5 10
2 8
3 9
样例输出

65
来源
[苗栋栋]原创
代码:
#include<iostream>

#include<algorithm>

#include<fstream>

using namespace std;

struct T

{

 int v;

 int w; 

}t[11];

bool cmp(T a,T b)

{

 if(a.v>b.v) return true;

 return false;

}

int main()

{

 int n;

 int s,m;

// ifstream cin(“test.txt”);

 cin>>n;

 while(n–)

 {

  cin>>s>>m;

  for(int i=0;i<s;i++)

  {

   cin>>t[i].v>>t[i].w;

  }

  sort(t,t+s,cmp);

  int g=m;

  int k=0;

  for(int i=0;i<s;i++)

  {

   if(t[i].w<g)

   {

    g-=t[i].w;

    k+=t[i].v*t[i].w;

   } 

   else

   {

    k+=t[i].v*g; 

    g=0;

   }

   if(g==0)

   {

    cout<<k<<endl;

    break; 

   }

  }

 } 

 return 0; 

}

    原文作者:贪心算法
    原文地址: https://blog.csdn.net/zzyy17/article/details/15504819
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞