普通背包问题

来源:互联网 发布:汕头新天音响淘宝店 编辑:程序博客网 时间:2024/05/16 10:26

背包问题

题目描述

现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值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。

输出

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

样例输入

复制
13 155 102 83 9

样例输出

复制
65






#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>using namespace std;struct dd{    int v,w;/*价值v和重量w*/}s[1000];bool cmp(dd a,dd b){    return a.v>b.v;}int main(){    int i,n,a,b;    scanf("%d",&n);    while(n--)    {        scanf("%d%d",&a,&b);        for ( i = 0 ; i < a ; i++)        {            scanf("%d%d",&s[i].v,&s[i].w);        }        sort(s,s + a,cmp);/*把价值从大到小排序*/        int sum=0;/*设置初始价值*/        for (i = 0 ; i < a ; i++)        {            if(b>=s[i].w)            {                sum+=(s[i].v*s[i].w);/*如果可以就把整个放入计算价值*/                b-=s[i].w;            }            else            {                sum+=(s[i].v*b);/*否则就放入剩下大小的物品计算价值*/                break;            }         }        printf("%d\n",sum);    }return 0;}











原创粉丝点击