揹包問題
描述 現在有很多物品(它們是可以分割的),我們知道它們每個物品的單位重量的價值v和重量w(1<=v,w<=10);如果給你一個揹包它能容納的重量爲m(10<=m<=20),你所要做的就是把物品裝到揹包裏,使揹包裏的物品的價值總和最大。 樣例輸入
1 3 15 5 10 2 8 3 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;
}