目录
题目描述
设有n件物品,重量分别为w1,w2,w3,…,wn和一个能装载总重量为T的背包。请从n件物品中选择若干件使它们的重量之和小于等于T,并使价值最大,输出该最大价值。输入第一行为物品件数n和总重量T,后面各行为每件物品的重量和价值。
提示:以下是本篇文章正文内容,下面案例可供参考
输入
5 100
77 92
22 22
29 87
50 46
99 90
输出
133
代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*
typedef struct node{
float w[100];
float v[100];
}List;*/
int main()
{
int n,t,i,j;//物品件数n和总重量T
int w[100];
int v[100];
scanf("%d %d",&n,&t);
//List *s;
for(i=0;i<n;i++)
{
scanf("%d %d",&w[i],&v[i]);
}
int temp;//按价值重量比排序
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(v[j]*1.0/w[j]<v[j+1]*1.0/w[j+1])
{
temp = w[j];
w[j]= w[j+1];
w[j+1]=temp;
temp = v[j];
v[j]=v[j+1];
v[j+1]=temp;
}
}
}
/*
for(i=0;i<n;i++)
{
printf("%d %d\n",w[i],v[i]);
}*/
int sumw=0,sumv=0;
int k=0;
do
{
if(w[k]>(t-sumw)&&(t-sumw)>=0)
{
k++;
}
else
{
sumv+=v[k];
sumw+=w[k];
k++;
}
}while(sumw<=t&&k<n);
printf("%d",sumv);
}