南陽理工 103揹包問題

2021-07-06 03:39:07 字數 1336 閱讀 9802

揹包問題
難度: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題意:

給定n種物品和乙個揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大,可以選擇物品i的一部分,而不一定要全部裝入揹包,1≤i≤n。

首先計算每種物品單位重量的價值vi/wi,然後,依貪心選擇策略,將盡可能多的單位重量價值最高的物品裝入揹包。若將這種物品全部裝入揹包後,揹包內的物品總重量未超過c,則選擇單位重量價值次高的物品並盡可能多地裝入揹包。依此策略一直地進行下去,直到揹包裝滿為止。

**:

# include 

# include

using

namespace

std;

void sort(int v,int w,int s);

int main()

sort(v,w,s);//排序,以單位價值排序

// for(int i=0;i

// printf("%d %d \n",v[i],w[i]);

// }

int sum = 0;

for(int i=0;iif(m>w[i])else

}printf("%d\n",sum);

} return0;}

void sort(int v,int w,int s)

t=v[k],v[k]=v[i],v[i]=t;

t=w[k],w[k]=w[i],w[i]=t;

} }

**2:

#include

#define max(a,b) a>b?a:b

int main()

; scanf("%d

%d",&s,&m);

for(i=0;iprintf("%d\n",dp[m]);

}}

南陽理工 揹包問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在有很多物品 它們是可以分割的 我們知道它們每個物品的單位重量的價值v和重量w 1 v,w 10 如果給你乙個揹包它能容納的重量為m 10 m 20 你所要做的就是把物品裝到揹包裡,使揹包裡的物品的價值總和最大。輸入第一行輸入...

南陽OJ 揹包問題

揹包問題 時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描寫敘述 如今有非常多物品 它們是能夠切割的 我們知道它們每乙個物品的單位重量的價值v和 重量w 1 v,w 10 假設給你乙個揹包它能容納的重量為m 10 m 20 你所要做的就是把物品裝到揹包裡,使揹包裡的物品的價值總和...

南陽理工acm 106揹包問題(排序 貪心)

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在有很多物品 它們是可以分割的 我們知道它們每個物品的單位重量的價值v和重量w 1 v,w 10 如果給你乙個揹包它能容納的重量為m 10 m 20 你所要做的就是把物品裝到揹包裡,使揹包裡的物品的價值總和最大。輸入第一行輸入...