背包问题

来源:互联网 发布:网络品牌推广公司 编辑:程序博客网 时间:2024/05/13 00:47

背包问题

描述
现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。
样例输入
13 155 102 83 9
样例输出
65

按价值排序,然后核心代码是:
for i in s
        {
            if(m>=w[i])
            { f+=v[i]*w[i];  m-=w[i]; }
            else
            { f+=v[i]*m;  break; }
        }
#include<stdio.h>int main(){    int n,i,j,k,l;    int v[10],w[10];    scanf("%d",&n);    while(n--)    {        int m,s,f=0;        scanf("%d%d",&s,&m);        for(i=0; i<s; i++)            scanf("%d%d",&v[i],&w[i]);        for(i=0; i<s-1; i++)        {            for(j=0; j<s-1-i; j++)            {                if(v[j]<v[j+1])                {                    k=v[j];                    v[j]=v[j+1];                    v[j+1]=k;                    l=w[j];                    w[j]=w[j+1];                    w[j+1]=l;                }            }        }        for(i=0; i<s; i++)        {            if(m>=w[i])            {                f+=v[i]*w[i];                m-=w[i];            }            else            {                f+=v[i]*m;                break;            }        }        printf("%d\n",f);    }    return 0;}



0 0
原创粉丝点击